毕设专用git仓库
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

/**
* @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
}