gpt4 book ai didi

如果脚本被杀死,node.js 生成的进程仍然存在

转载 作者:IT老高 更新时间:2023-10-28 23:16:09 24 4
gpt4 key购买 nike

是否可以确保使用 node.js child_process 生成的进程将在父进程被杀死时被杀死?

这是一个示例脚本

var spawn = require('child_process').spawn;
var log_tail = spawn("tail", ["-f", "/dev/null"]);

setInterval(function() {
console.log('just chilling');
}, 10000);

如果我查看进程树,我会看到:

$ ps faux
ubuntu 9788 0.0 0.0 73352 1840 ? S 15:04 0:00 | \_ sshd: ubuntu@pts/7
ubuntu 9789 0.0 0.2 25400 6804 pts/7 Ss 15:04 0:00 | \_ -bash
ubuntu 10149 1.0 0.2 655636 8696 pts/7 Sl+ 15:07 0:00 | \_ node test.js
ubuntu 10151 0.0 0.0 7184 608 pts/7 S+ 15:07 0:00 | \_ tail -f /dev/null

然后我需要停止该脚本并且不能按 ctrl-c(假设我的 ssh 连接丢失)

$ kill 10149
$ ps faux
ubuntu 10151 0.0 0.0 7184 608 pts/7 S 15:07 0:00 tail -f /dev/null

您可以看到尾部进程仍在运行,并且已与任何父进程分离。

如果生成器被杀死,是否有编程方法来杀死生成的进程?

是否有可以传递给 spawn 的选项,或者我应该使用不同的方法,还是需要捕获 kill 信号(这对 kill -9 有效)?

最佳答案

对劳动力不太友好,但这是我使用的模板:

var spawn = require("child_process").spawn;
var workers = [];

var killWorkers = function() {
workers.forEach(function(worker) {
process.kill(worker);
});
});

process.on("uncaughtException", killWorkers);
process.on("SIGINT", killWorkers);
process.on("SIGTERM", killWorkers);

var new_worker = spawn("tail", ["-f", "/dev/null"]);
workers.push(new_worker);

我主要使用它来在主进程死亡时杀死集群中的工作人员。 Ed:显然,您可以从任何地方调用 killWorkers,而不仅仅是崩溃或中断。

关于如果脚本被杀死,node.js 生成的进程仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com