Nic*_*ros 16 winapi signals process node.js
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();
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用.孩子开始并将继续无限期地写出输出.我无法弄清楚如何杀死这个子进程.我在Windows 7中运行节点v0.11.9.我知道Windows不使用POSIX信号,但发送它'WM_QUIT'会导致异常.是我在stdin上设置事件协议的最佳解决方案吗?
小智 34
对于我当前接受的答案,这仍然不起作用.在Windows上可以使用的解决方法是调用Windows taskkill程序来为您杀死子进程.不太好,但它的工作原理.当您生成子项时,您将获得存储在生成时返回的子对象中的ProcessID(pid),您可以使用taskkill来终止该进程.
var spawn = require('child_process').spawn;
spawn("taskkill", ["/pid", child.pid, '/f', '/t']);
Run Code Online (Sandbox Code Playgroud)
如果您希望能够通过 杀死子进程SIGKILL,请改用spawnasspawn将创建一个子进程(而不是像这样的新 shell exec:
var exec = require('child_process').spawn;
Run Code Online (Sandbox Code Playgroud)
或者,您可以将timeout参数传递给exec,这将在几毫秒后终止进程。
child = exec('node child.js', { timeout: 1000 });
Run Code Online (Sandbox Code Playgroud)
只是更新
现在此代码可以运行(使用 Node.js 8.9.3 和 Windows 10 进行测试):
spawn = require('child_process').spawn;
child = spawn('node', ['child.js']);
setTimeout(function() {
child.kill();
}, 5000
);
Run Code Online (Sandbox Code Playgroud)