子进程不会被Node.JS杀死

Gho*_*toy 19 javascript node.js

我用child_process.exec/ child_process.spawn到一个新的进程,然后用杀死它child.kill/ process.kill.它可以很好地处理简单的二进制可执行文件,例如cat/ ls,并且子进程就会被杀死.

然而,当到达脚本(比如P1)叉另一个子进程(比如P2) ,仅脚本解释P1被打死,而不是子进程P2.

问题:有没有办法让Node.JS杀死这样的子进程P2?

代码工作正常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();
}
Run Code Online (Sandbox Code Playgroud)

小智 1

我认为你的P2既不是 P1 的分支,也不是P1的子进程,而是由它产生的并行进程。对于 Firefox(至少在 Linux 中),firefox 应用程序是通过包装 shell 脚本启动的。如果始终是 Firefox,最好直接从安装文件夹运行二进制文件