我使用child_process.exec
/child_process.spawn
派生了一个新进程,然后使用child.kill
/process.kill
杀死了它。它可以与简单的二进制可执行文件(例如cat
/ls
)一起正常工作,并且子进程只会被杀死。
但是,当到达时,派生另一个子进程(例如P2)的脚本(例如P1),只有脚本解释器P1被杀死,而不是子进程P2被杀死。
问题:是否有任何方法可以使此类子进程P2被Node.JS杀死?
代码可以与run_and_kill('ls -Al /usr/lib')
一起正常工作,但不能与run_and_kill('firefox')
一起正常工作:
function run_and_kill(cmd) {
var exec = require('child_process').exec,
ls = exec(cmd);
console.log('Child process started: %d', ls.pid);
ls.on('exit', function(code, signal) {
console.log('exit with code %s and signal %s', code, signal);
});
ls.kill();
}
最佳答案
我找到的最安全的方法是使用child.pid作为参数来创建一个生成进程来杀死信号。使用fork的示例:
var process;
process = require('child_process');
var fork, child;
fork = process.fork;
child = fork('./index');
var spawn;
spawn = process.spawn;
spawn('kill', [child.pid]);
console.log('sending SIGTERM to child process (socket server)');
我通常在规范中使用它,主要是在beforeAll/afterAll块中用于启动/杀死服务器(在示例中为“./index.js”)。