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,最好从安装文件夹直接运行二进制文件