summaryrefslogtreecommitdiffstats
path: root/node_modules/pstree.remy/lib/utils.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/pstree.remy/lib/utils.js
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/pstree.remy/lib/utils.js')
-rw-r--r--node_modules/pstree.remy/lib/utils.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/node_modules/pstree.remy/lib/utils.js b/node_modules/pstree.remy/lib/utils.js
new file mode 100644
index 0000000..8fa5719
--- /dev/null
+++ b/node_modules/pstree.remy/lib/utils.js
@@ -0,0 +1,53 @@
+const spawn = require('child_process').spawn;
+
+module.exports = { tree, pidsForTree, getStat };
+
+function getStat() {
+ return new Promise((resolve) => {
+ const command = `ls /proc | grep -E '^[0-9]+$' | xargs -I{} cat /proc/{}/stat`;
+ const spawned = spawn('sh', ['-c', command], {
+ stdio: ['pipe', 'pipe', 'pipe'],
+ });
+
+ var res = '';
+ spawned.stdout.on('data', (data) => (res += data));
+ spawned.on('close', () => resolve(res));
+ });
+}
+
+function template(s) {
+ var stat = null;
+ // 'pid', 'comm', 'state', 'ppid', 'pgrp'
+ // %d (%s) %c %d %d
+ s.replace(
+ /(\d+) \((.*?)\)\s(.+?)\s(\d+)\s/g,
+ (all, PID, COMMAND, STAT, PPID) => {
+ stat = { PID, COMMAND, PPID, STAT };
+ }
+ );
+
+ return stat;
+}
+
+function tree(stats) {
+ const processes = stats.split('\n').map(template).filter(Boolean);
+
+ return processes;
+}
+
+function pidsForTree(tree, pid) {
+ if (typeof pid === 'number') {
+ pid = pid.toString();
+ }
+ const parents = [pid];
+ const pids = [];
+
+ tree.forEach((proc) => {
+ if (parents.indexOf(proc.PPID) !== -1) {
+ parents.push(proc.PID);
+ pids.push(proc);
+ }
+ });
+
+ return pids;
+}