Nodejs包之graceful-process 进程优雅退出

linux杀死进程

我们常用的进程杀死信号有:SIGKILL, SIGTERM,其中SIGKILL的信号是不能被程序捕捉的。SIGTERM的信号是能够被程序捕捉的。

Nodejs捕获退出信号

process.once('SIGTERM', () => {})

但是无法捕捉process.once('SIGKILL', () => {})

使用graceful-process优雅退出

  1. 使用方法
require('graceful-process')({
  logger: console, 
  label: 'mycli-child-cmd' 
});

可以参考egg-cluster里面使用 agent_worker.js

  1. 实现原理
    主要是通过 在集群模式下监听 cluster.worker.once('disconnect')事件,或者在child_process模式下监听process.once('disconnect')实现关闭信号的监听,从而优雅退出。
    Note: 通过cluster.worker.exitedAfterDisconnect可以判断集群是否是正常退出。cluster.worker.kill();代表是正常退出,exitedAfterDisconnect返回true。

你可能感兴趣的:(Nodejs包之graceful-process 进程优雅退出)