diff options
author | 2020-11-16 00:10:28 +0100 | |
---|---|---|
committer | 2020-11-16 00:10:28 +0100 | |
commit | e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch) | |
tree | 55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/pidtree/bin/pidtree.js | |
download | website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2 website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip |
api, login, auth
Diffstat (limited to 'node_modules/pidtree/bin/pidtree.js')
-rwxr-xr-x | node_modules/pidtree/bin/pidtree.js | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/node_modules/pidtree/bin/pidtree.js b/node_modules/pidtree/bin/pidtree.js new file mode 100755 index 0000000..542876e --- /dev/null +++ b/node_modules/pidtree/bin/pidtree.js @@ -0,0 +1,128 @@ +#!/usr/bin/env node + +'use strict'; + +var os = require('os'); +var pidtree = require('..'); + +// The method startsWith is not defined on string objects in node 0.10 +// eslint-disable-next-line no-extend-native +String.prototype.startsWith = function(suffix) { + return this.substring(0, suffix.length) === suffix; +}; + +function help() { + var help = + ' Usage\n' + + ' $ pidtree <ppid>\n' + + '\n' + + 'Options\n' + + ' --list To print the pids as a list.\n' + + '\n' + + 'Examples\n' + + ' $ pidtree\n' + + ' $ pidtree --list\n' + + ' $ pidtree 1\n' + + ' $ pidtree 1 --list\n'; + console.log(help); +} + +function list(ppid) { + pidtree(ppid === undefined ? -1 : ppid, function(err, list) { + if (err) { + console.error(err.message); + return; + } + + console.log(list.join(os.EOL)); + }); +} + +function tree(ppid) { + pidtree(ppid, {advanced: true}, function(err, list) { + if (err) { + console.error(err.message); + return; + } + + var parents = {}; // Hash Map of parents + var tree = {}; // Adiacency Hash Map + while (list.length > 0) { + var element = list.pop(); + if (tree[element.ppid]) { + tree[element.ppid].push(element.pid); + } else { + tree[element.ppid] = [element.pid]; + } + + if (ppid === -1) { + parents[element.pid] = element.ppid; + } + } + + var roots = [ppid]; + if (ppid === -1) { + // Get all the roots + roots = Object.keys(tree).filter(function(node) { + return parents[node] === undefined; + }); + } + + roots.forEach(function(root) { + print(tree, root); + }); + }); + + function print(tree, start) { + function printBranch(node, branch) { + var isGraphHead = branch.length === 0; + var children = tree[node] || []; + + var branchHead = ''; + if (!isGraphHead) { + branchHead = children.length > 0 ? '┬ ' : '─ '; + } + + console.log(branch + branchHead + node); + + var baseBranch = branch; + if (!isGraphHead) { + var isChildOfLastBranch = branch.slice(-2) === '└─'; + baseBranch = branch.slice(0, -2) + (isChildOfLastBranch ? ' ' : '| '); + } + + var nextBranch = baseBranch + '├─'; + var lastBranch = baseBranch + '└─'; + children.forEach(function(child, index) { + printBranch( + child, + children.length - 1 === index ? lastBranch : nextBranch + ); + }); + } + + printBranch(start, ''); + } +} + +function run() { + var flag; + var ppid; + for (var i = 2; i < process.argv.length; i++) { + if (process.argv[i].startsWith('--')) { + flag = process.argv[i]; + } else { + ppid = process.argv[i]; + } + } + + if (ppid === undefined) { + ppid = -1; + } + + if (flag === '--list') list(ppid); + else if (flag === undefined) tree(ppid); + else help(); +} + +run(); |