NodeJS如何正确实现SIGINT / SIGTERM信号的侦听器以处理资源?

时间:2020-06-01 17:22:54

标签: node.js

我是新手,试图学习Node.js,并努力了解如何正确覆盖SIGINT / SIGTERM处理程序,以安全地处理派生子进程中的资源。

  • 如果仅重写SIGINT,则必须在终端中再次发出CTRL-C来终止。
  • 如果我仅覆盖SIGTERM,则当发出SIGINT时,该过程将退出,但是不会触发自定义SIGTERM处理程序。

Nodejs documentation指出:

'SIGTERM'和'SIGINT'在非Windows平台上具有默认处理程序,这些处理程序在退出代码128 +信号编号之前会重置终端模式。如果这些信号之一已安装侦听器,则将删除其默认行为(Node.js不再退出)。

看起来,如果为SIGINT或SIGTERM实现了侦听器,则将删除两个默认处理程序。

如何通过触发SIGTERM处置资源的附加功能来模仿SIGINT的默认行为?

当前,我有:

/**
 * Signal handlers 
 */
process.on('SIGTERM', (signal, code) => {
  signalExit(code, me);
});

process.on('SIGINT', (signal, code) => {
  signalExit(code, me);
});


/**
 * Reset the terminal, dispose of resources and exit with code 128+exitCode
 * @param {number} exitCode - Exit code
 * @param {Process} me - Process resource manager 
 */
function signalExit(exitCode, me) {
    process.stdout.write('\x1Bc');
    dispose(me);
    process.exit(128 + exitCode);
}

这正是我想要的,因为在退出进程的同时SIGINT和SIGTERM都处理了资源。

但是,我不确定以下内容:

  1. 如果在 signalExit 中捕获到dispose函数引发的异常,退出代码应该是什么?
  2. 在Windows平台上SIGINT和SIGTERM的行为/退出代码应该是什么?

0 个答案:

没有答案