diff options
Diffstat (limited to 'node_modules/npm-run-all/lib/spawn-posix.js')
-rw-r--r-- | node_modules/npm-run-all/lib/spawn-posix.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/node_modules/npm-run-all/lib/spawn-posix.js b/node_modules/npm-run-all/lib/spawn-posix.js new file mode 100644 index 0000000..604bfef --- /dev/null +++ b/node_modules/npm-run-all/lib/spawn-posix.js @@ -0,0 +1,64 @@ +/** + * @module spawn-posix + * @author Toru Nagashima + * @copyright 2015 Toru Nagashima. All rights reserved. + * See LICENSE file in root directory for full license. + */ +"use strict" + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const crossSpawn = require("cross-spawn") +const getDescendentProcessInfo = require("pidtree") + +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +/** + * Kills the new process and its sub processes. + * @this ChildProcess + * @returns {void} + */ +function kill() { + getDescendentProcessInfo(this.pid, { root: true }, (err, pids) => { + if (err) { + return + } + + for (const pid of pids) { + try { + process.kill(pid) + } + catch (_err) { + // ignore. + } + } + }) +} + +//------------------------------------------------------------------------------ +// Public Interface +//------------------------------------------------------------------------------ + +/** + * Launches a new process with the given command. + * This is almost same as `child_process.spawn`. + * + * This returns a `ChildProcess` instance. + * `kill` method of the instance kills the new process and its sub processes. + * + * @param {string} command - The command to run. + * @param {string[]} args - List of string arguments. + * @param {object} options - Options. + * @returns {ChildProcess} A ChildProcess instance of new process. + * @private + */ +module.exports = function spawn(command, args, options) { + const child = crossSpawn(command, args, options) + child.kill = kill + + return child +} |