使用throng,SIGINT监听器不会阻止退出节点

这个问题是关于节点模块群。
如节点文档中所述,当在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上testing

testingstartWorker方法,而不用throng将工作。 这个过程不会停止。 所以这一定是个问题。

有没有人有过这样的经历,可以向我解释行为?

这当然是一个错误,因为开发人员完全按照其模块描述和示例来指定它。 不过,我认为从一开始就无法正常工作,因为当主进程closures时,所有的subprocess都会自动终止。 等待孩子的进程结束,而不是提供。 开发者似乎已经认识到了这一点。 有处理这个问题的gint 2 pull request。