aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/tree-kill
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/tree-kill')
-rw-r--r--node_modules/tree-kill/LICENSE21
-rw-r--r--node_modules/tree-kill/README.md89
-rwxr-xr-xnode_modules/tree-kill/cli.js14
-rw-r--r--node_modules/tree-kill/index.d.ts13
-rwxr-xr-xnode_modules/tree-kill/index.js118
-rw-r--r--node_modules/tree-kill/package.json51
6 files changed, 306 insertions, 0 deletions
diff --git a/node_modules/tree-kill/LICENSE b/node_modules/tree-kill/LICENSE
new file mode 100644
index 0000000..aa86c2d
--- /dev/null
+++ b/node_modules/tree-kill/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Peter Krumins
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/tree-kill/README.md b/node_modules/tree-kill/README.md
new file mode 100644
index 0000000..59a00ea
--- /dev/null
+++ b/node_modules/tree-kill/README.md
@@ -0,0 +1,89 @@
+Tree Kill
+=========
+
+Kill all processes in the process tree, including the root process.
+
+Examples
+=======
+
+Kill all the descendent processes of the process with pid `1`, including the process with pid `1` itself:
+```js
+var kill = require('tree-kill');
+kill(1);
+```
+
+Send a signal other than SIGTERM.:
+```js
+var kill = require('tree-kill');
+kill(1, 'SIGKILL');
+```
+
+Run a callback when done killing the processes. Passes an error argument if there was an error.
+```js
+var kill = require('tree-kill');
+kill(1, 'SIGKILL', function(err) {
+ // Do things
+});
+```
+
+You can also install tree-kill globally and use it as a command:
+```sh
+tree-kill 1 # sends SIGTERM to process 1 and its descendents
+tree-kill 1 SIGTERM # same
+tree-kill 1 SIGKILL # sends KILL instead of TERMINATE
+```
+
+Methods
+=======
+
+## require('tree-kill')(pid, [signal], [callback]);
+
+Sends signal `signal` to all children processes of the process with pid `pid`, including `pid`. Signal defaults to `SIGTERM`.
+
+For Linux, this uses `ps -o pid --no-headers --ppid PID` to find the parent pids of `PID`.
+
+For Darwin/OSX, this uses `pgrep -P PID` to find the parent pids of `PID`.
+
+For Windows, this uses `'taskkill /pid PID /T /F'` to kill the process tree. Note that on Windows, sending the different kinds of POSIX signals is not possible.
+
+Install
+=======
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install tree-kill
+```
+
+License
+=======
+
+MIT
+
+Changelog
+=========
+
+
+## [1.2.2] - 2019-12-11
+### Changed
+- security fix: sanitize `pid` parameter to fix arbitrary code execution vulnerability
+
+## [1.2.1] - 2018-11-05
+### Changed
+- added missing LICENSE file
+- updated TypeScript definitions
+
+## [1.2.0] - 2017-09-19
+### Added
+- TypeScript definitions
+### Changed
+- `kill(pid, callback)` works. Before you had to use `kill(pid, signal, callback)`
+
+## [1.1.0] - 2016-05-13
+### Added
+- A `tree-kill` CLI
+
+## [1.0.0] - 2015-09-17
+### Added
+- optional callback
+- Darwin support
diff --git a/node_modules/tree-kill/cli.js b/node_modules/tree-kill/cli.js
new file mode 100755
index 0000000..1acb815
--- /dev/null
+++ b/node_modules/tree-kill/cli.js
@@ -0,0 +1,14 @@
+#!/usr/bin/env node
+kill = require('.')
+try {
+ kill(process.argv[2], process.argv[3], function(err){
+ if (err) {
+ console.log(err.message)
+ process.exit(1)
+ }
+ })
+}
+catch (err) {
+ console.log(err.message)
+ process.exit(1)
+}
diff --git a/node_modules/tree-kill/index.d.ts b/node_modules/tree-kill/index.d.ts
new file mode 100644
index 0000000..e0b1302
--- /dev/null
+++ b/node_modules/tree-kill/index.d.ts
@@ -0,0 +1,13 @@
+/**
+ * Kills process identified by `pid` and all its children
+ *
+ * @param pid
+ * @param signal 'SIGTERM' by default
+ * @param callback
+ */
+declare function treeKill(pid: number, callback?: (error?: Error) => void): void;
+declare function treeKill(pid: number, signal?: string | number, callback?: (error?: Error) => void): void;
+
+declare namespace treeKill {}
+
+export = treeKill;
diff --git a/node_modules/tree-kill/index.js b/node_modules/tree-kill/index.js
new file mode 100755
index 0000000..8df6a0f
--- /dev/null
+++ b/node_modules/tree-kill/index.js
@@ -0,0 +1,118 @@
+'use strict';
+
+var childProcess = require('child_process');
+var spawn = childProcess.spawn;
+var exec = childProcess.exec;
+
+module.exports = function (pid, signal, callback) {
+ if (typeof signal === 'function' && callback === undefined) {
+ callback = signal;
+ signal = undefined;
+ }
+
+ pid = parseInt(pid);
+ if (Number.isNaN(pid)) {
+ if (callback) {
+ return callback(new Error("pid must be a number"));
+ } else {
+ throw new Error("pid must be a number");
+ }
+ }
+
+ var tree = {};
+ var pidsToProcess = {};
+ tree[pid] = [];
+ pidsToProcess[pid] = 1;
+
+ switch (process.platform) {
+ case 'win32':
+ exec('taskkill /pid ' + pid + ' /T /F', callback);
+ break;
+ case 'darwin':
+ buildProcessTree(pid, tree, pidsToProcess, function (parentPid) {
+ return spawn('pgrep', ['-P', parentPid]);
+ }, function () {
+ killAll(tree, signal, callback);
+ });
+ break;
+ // case 'sunos':
+ // buildProcessTreeSunOS(pid, tree, pidsToProcess, function () {
+ // killAll(tree, signal, callback);
+ // });
+ // break;
+ default: // Linux
+ buildProcessTree(pid, tree, pidsToProcess, function (parentPid) {
+ return spawn('ps', ['-o', 'pid', '--no-headers', '--ppid', parentPid]);
+ }, function () {
+ killAll(tree, signal, callback);
+ });
+ break;
+ }
+};
+
+function killAll (tree, signal, callback) {
+ var killed = {};
+ try {
+ Object.keys(tree).forEach(function (pid) {
+ tree[pid].forEach(function (pidpid) {
+ if (!killed[pidpid]) {
+ killPid(pidpid, signal);
+ killed[pidpid] = 1;
+ }
+ });
+ if (!killed[pid]) {
+ killPid(pid, signal);
+ killed[pid] = 1;
+ }
+ });
+ } catch (err) {
+ if (callback) {
+ return callback(err);
+ } else {
+ throw err;
+ }
+ }
+ if (callback) {
+ return callback();
+ }
+}
+
+function killPid(pid, signal) {
+ try {
+ process.kill(parseInt(pid, 10), signal);
+ }
+ catch (err) {
+ if (err.code !== 'ESRCH') throw err;
+ }
+}
+
+function buildProcessTree (parentPid, tree, pidsToProcess, spawnChildProcessesList, cb) {
+ var ps = spawnChildProcessesList(parentPid);
+ var allData = '';
+ ps.stdout.on('data', function (data) {
+ var data = data.toString('ascii');
+ allData += data;
+ });
+
+ var onClose = function (code) {
+ delete pidsToProcess[parentPid];
+
+ if (code != 0) {
+ // no more parent processes
+ if (Object.keys(pidsToProcess).length == 0) {
+ cb();
+ }
+ return;
+ }
+
+ allData.match(/\d+/g).forEach(function (pid) {
+ pid = parseInt(pid, 10);
+ tree[parentPid].push(pid);
+ tree[pid] = [];
+ pidsToProcess[pid] = 1;
+ buildProcessTree(pid, tree, pidsToProcess, spawnChildProcessesList, cb);
+ });
+ };
+
+ ps.on('close', onClose);
+}
diff --git a/node_modules/tree-kill/package.json b/node_modules/tree-kill/package.json
new file mode 100644
index 0000000..fa37804
--- /dev/null
+++ b/node_modules/tree-kill/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "tree-kill",
+ "version": "1.2.2",
+ "description": "kill trees of processes",
+ "main": "index.js",
+ "types": "index.d.ts",
+ "bin": {
+ "tree-kill": "cli.js"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/pkrumins/node-tree-kill.git"
+ },
+ "homepage": "https://github.com/pkrumins/node-tree-kill",
+ "keywords": [
+ "tree",
+ "trees",
+ "process",
+ "processes",
+ "kill",
+ "signal"
+ ],
+ "author": {
+ "name": "Peteris Krumins",
+ "email": "peteris.krumins@gmail.com",
+ "url": "http://www.catonmat.net"
+ },
+ "contributors": [
+ {
+ "name": "Todd Wolfson",
+ "email": "todd@twolfson.com",
+ "url": "http://twolfson.com/"
+ },
+ {
+ "name": "William Hilton",
+ "email": "wmhilton@gmail.com",
+ "url": "http://wmhilton.com/"
+ },
+ {
+ "name": "Fabrício Matté",
+ "url": "http://ultcombo.js.org/"
+ }
+ ],
+ "license": "MIT",
+ "devDependencies": {
+ "mocha": "^2.2.5"
+ }
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage