为什么我不能在windows上的nodejs中杀死我的子进程?

时间:2014-05-16 23:38:02

标签: node.js winapi process signals

exec = require('child_process').exec;

child = exec('node child.js');
child.stdout.pipe(process.stdout);
child.kill('SIGKILL');

function wait() {
    setTimeout(wait, 1000);
    child.kill('SIGKILL');
}
wait();

上述代码不起作用。孩子开始并将继续无限期地写出输出。我无法弄清楚如何杀死这个子进程。我在Windows 7中运行节点v0.11.9。我知道Windows不使用POSIX信号,而是发送它' WM_QUIT'导致例外。我是在stdin上设置事件协议的最佳解决方案吗?

5 个答案:

答案 0 :(得分:29)

对于我当前接受的答案,这仍然不起作用。在Windows上可以使用的解决方法是调用Windows taskkill程序来为您杀死子进程。不太好,但它的工作原理。当您生成子项时,您将获得存储在生成时返回的子对象中的ProcessID(pid),您可以使用taskkill来终止该进程。

var spawn = require('child_process').spawn;    
spawn("taskkill", ["/pid", child.pid, '/f', '/t']);

答案 1 :(得分:4)

如果您希望能够通过SIGKILL终止子进程,请改用spawn,因为spawn会创建一个子进程(而不是像{{1}这样的新shell }:

exec

或者,您可以将var exec = require('child_process').spawn; 参数传递给timeout,这将在几毫秒之后终止进程。

exec

答案 2 :(得分:4)

我不得不使用以下包来杀死我的子进程:

https://www.npmjs.com/package/tree-kill

常规.kill命令对我来说不适用于树莓派。

答案 3 :(得分:1)

只需更新

现在此代码有效(已在Node.js 8.9.3和Windows 10上测试):

spawn = require('child_process').spawn;
child = spawn('node', ['child.js']);

setTimeout(function() {
    child.kill();
    }, 5000
);

答案 4 :(得分:0)

检查它对我有用的代码。


    var killer = require('child_process');

    killer=exec('taskkill /F /pid '+child.pid);


杀手是一个变量,孩子是你的孩子过程。 当您创建子进程时,它有许多与之关联的属性,而pid就是其中之一。 有关子进程属性和函数的更多详细信息,请查看此node.js child process

该程序用于在Windows环境中终止子进程。