我使用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”)。

10-05 20:36
查看更多