subprocess没有被Node.JS杀死

我使用了child_process.exec / child_process.spawn来创build一个新的进程,然后使用child.kill / process.kill杀死它。 它可以用简单的二进制可执行文件(如cat / ls ,并且subprocess就会被终止。

然而,当到达另一个subprocess(比如P2)的脚本(比如P1)时 ,只有脚本解释器P1被杀死,而不是subprocessP2。

问题 :有没有什么办法让Node.JS这样的subprocessP2被杀死?

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(); } 

我发现最安全的方法是创build一个产卵过程来杀死信号,使用child.pid作为参数。 示例与叉:

 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”)。

我认为你的P2既不是P1的分叉,也不是P1的子代,而是一个并行的过程。 在Firefox的情况下(至less在Linux中),firefox应用程序是由包装程序脚本启动的。 如果它一直是Firefox,最好从安装文件夹直接运行二进制文件