我有一个使用child_process.fork生成的子进程,并希望终止它。问题是子进程执行了一些冗长的CPU绑定计算,我无法控制它。也就是说,无法重构CPU绑定代码片段以使用process.nextTick或polling。
一个非常简单的例子:
parent.js
var cp = require('child_process');
var child = cp.fork('child.js');
child.js
...
while(true){} // lengthy computation which I cannot modify
...
是否可以终止它?优选的方式是允许在儿童中捕捉退出事件以进行一些清理?
使用child.kill()发送SIGTERM / SIGKILL / etc不会 似乎适用于Windows。我假设即使它适用于其他操作系统,它也不会因为孩子在进行计算时无法处理事件而终止进程。
答案 0 :(得分:0)
我通过该进程的using the PID以杂乱的方式完成了这一操作并在操作系统级别将其删除。
不确定如何在Windows中执行此操作,但在Linux / mac中我已完成:
var cp = require('child_process'),
badJob = cp.fork('badFile.js');
cp.execSync('kill -9 ' + badJob.pid);
The signal 9 is caught at the Kernel level,因此该过程的条件无关紧要。
编辑:在Windows中,您可以使用taskkill代替kill。例如:
cp.execSync('taskkill /f ' + badJob.pid);