gpt4 book ai didi

node.js - 使用 throng,SIGINT 监听器不会阻止退出 Node

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:15 27 4
gpt4 key购买 nike

这个问题是关于 Node 模块throng .
如 Node 文档中所述,当在 SIGINT 或/和 SIGTERM 上定义监听器时, Node 应防止退出。但throng总会退出。

If one of these signals has a listener installed, its default behavior will be removed (Node.js will no longer exit).

https://nodejs.org/api/process.html#process_signal_events

如何重现

使用GitHub上的默认示例并注释掉process.exit行,node仍然会退出进程。

const throng = require('./lib/throng');

throng({
workers: 1,
master: startMaster,
start: startWorker
});

// This will only be called once
function startMaster() {
console.log(`Started master`);
}

// This will be called four times
function startWorker()(id) {
console.log(`Started worker ${ id }`);

process.on('SIGTERM', () => {
console.log(`Worker ${ id } exiting...`);
console.log('(cleanup would happen here)');
//process.exit();
});
}

在 macOS 10.12.3、NodeJS 7.7.3 和 throng 4.0.0 上测试

在没有 throng 的情况下测试 startWorker 方法将会起作用。这个过程不会停止。所以这一定是throng上的一个问题。

有没有人已经在 throng 上有过这样的经历,并且可以向我解释这种行为?

最佳答案

这肯定是一个错误,因为开发人员按照模块描述和示例中的方式指定了它。尽管如此,我认为它从一开始就无法正常工作,因为当主进程关闭时,所有子进程都会自动终止。尚未提供等待子进程结束的信息。开发商似乎已经认识到了这一点。 gint 2 pull request 可以解决这个问题。

关于node.js - 使用 throng,SIGINT 监听器不会阻止退出 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43008324/

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