You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
/** |
|
* @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 |
|
}
|
|
|