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上设置事件协议的最佳解决方案吗?
答案 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)
答案 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环境中终止子进程。