这个问题与节点模块throng有关
如节点文档中所述,当在SIGINT或/和SIGTERM上定义侦听器时,节点应防止退出。但throng
将永远退出。
如果其中一个信号安装了侦听器,则其默认行为 将被删除(Node.js将不再退出)。
https://nodejs.org/api/process.html#process_signal_events
使用GitHub上的默认示例并注释掉process.exit行,节点仍将退出该进程。
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
上测试在没有startWorker
的情况下测试throng
方法会有效。这个过程不会停止。所以这必须是throng
上的问题。
有没有人已经使用throng
获得过这样的经历并且可以向我解释这种行为?
答案 0 :(得分:1)
这肯定是一个错误,因为开发人员在其模块描述和示例中完全指定了它。 尽管如此,我认为它从一开始就无法正常工作,因为当主进程关闭时,所有子进程都将自动终止。等待儿童进程的结束没有提供。 开发人员似乎已经认识到这一点。处理这个问题的gint 2 pull请求。