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。