【问题标题】:Killing CPU bound child process杀死 CPU 绑定的子进程
【发布时间】:2015-06-27 22:56:23
【问题描述】:

我有一个使用 child_process.fork 生成的子进程并想终止它。问题是子进程进行了一些冗长的 CPU 绑定计算,而我无法控制它。也就是说,CPU 绑定的代码片段不能被重构以使用 process.nextTick 或轮询。

一个非常简单的例子:

父.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 上工作。我假设即使它可以在其他操作系统上运行,它也不会因为孩子在进行计算时无法处理事件而终止该进程。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    我已经通过进程的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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 2014-03-28
      • 2018-10-14
      相关资源
      最近更新 更多