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”会导致异常。我是在标准输入上设置事件协议的最佳解决方案吗?
对于我当前接受的答案来说,这仍然不起作用。在 Windows 上,您可以使用的解决方法是调用 Windows Taskkill 程序来为您终止子进程。不太好,但它有效。当您生成子进程时,您会获得存储在生成时返回的子对象中的 ProcessID (pid),您可以使用 taskkill 来终止该进程。
var spawn = require('child_process').spawn;
spawn("taskkill", ["/pid", child.pid, '/f', '/t']);
如果您希望能够通过
SIGKILL
终止子进程,请使用 spawn
,因为 spawn
将创建一个子进程(而不是像 exec
这样的新 shell:
var exec = require('child_process').spawn;
或者,您可以将
timeout
参数传递给 exec
,这将在几毫秒后终止进程。
child = exec('node child.js', { timeout: 1000 });
只是更新
现在此代码可以运行(使用 Node.js 8.9.3 和 Windows 10 进行测试):
spawn = require('child_process').spawn;
child = spawn('node', ['child.js']);
setTimeout(function() {
child.kill();
}, 5000
);
检查这个代码,它对我有用。
var Killer = require('child_process'); Killer=exec('taskkill /F /pid '+child.pid);
这里的 Killer 是一个变量,child 是你的子进程。
当您创建子进程时,它有许多与之关联的属性,pid 就是其中之一。
有关子进程属性和功能的更多详细信息,请检查此node.js子进程。
此程序是在windows环境下杀死子进程的程序。
macOS下没有问题。在Windows下,kill只能退出进程,不能关闭进程。 Windows下需要手动
destroy
。
const cp = require('child_process').spawn('your code')
// add this code
cp.stdout.destroy()
cp.stdin.destroy()
cp.stderr.destroy()
cp.kill()