linux杀死进程
我们常用的进程杀死信号有:SIGKILL, SIGTERM,其中SIGKILL的信号是不能被程序捕捉的。SIGTERM的信号是能够被程序捕捉的。
Nodejs捕获退出信号
process.once('SIGTERM', () => {})
但是无法捕捉process.once('SIGKILL', () => {})
使用graceful-process优雅退出
- 使用方法
require('graceful-process')({
logger: console,
label: 'mycli-child-cmd'
});
可以参考egg-cluster里面使用 agent_worker.js
- 实现原理
主要是通过 在集群模式下监听cluster.worker.once('disconnect')事件,或者在child_process模式下监听process.once('disconnect')实现关闭信号的监听,从而优雅退出。
Note: 通过cluster.worker.exitedAfterDisconnect可以判断集群是否是正常退出。cluster.worker.kill();代表是正常退出,exitedAfterDisconnect返回true。







网友评论