为什么我不能在windows上的nodejs中终止我的subprocess?

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'会导致exception。 我的最佳解决scheme是在stdin上设置一个事件协议?

如果你希望能够通过SIGKILL杀死subprocess,可以使用spawn ,因为spawn会创build一个subprocess(而不是像exec这样的新shell:

 var exec = require('child_process').spawn; 

或者,您可以将timeoutparameter passing给exec ,这将在数毫秒后终止进程。

 child = exec('node child.js', { timeout: 1000 }); 

对于我目前接受的答案,这仍然不起作用。 在Windows上可以使用的解决方法是调用windows taskkill程序来为你杀死subprocess。 不是很好,但它的工作原理。 当你产卵的孩子,你会得到一个ProcessID(pid)存储在产卵时返回的子对象,你可以使用taskkill杀死进程。

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

我不得不使用下面的包来杀死我的subprocess:

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

常规的.kill命令对于我来说不会对一个覆盆子pi工作。

检查它为我工作的代码。


     var killer = require('child_process');

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

这里杀手是一个variables,孩子是你的孩子的过程。 当你创build一个subprocess时,它有许多与它相关的属性,而pid就是其中之一。 有关subprocess属性和函数的更多详细信息,请查看此node.jssubprocess 。

这个程序是在windows环境中杀死subprocess的。