【问题标题】:process.on('SIGINT' multiple termination signalsprocess.on('SIGINT' 多个终止信号
【发布时间】:2018-04-05 03:39:18
【问题描述】:

我有这个节点代码,可以检测何时按下 Ctrl+C 在节点应用程序退出之前执行一些操作

process.on('SIGINT', function() {
    /* DO SOME STUFF HERE */

    process.exit()
})

现在这可行,但我想在此进程中添加其他终止信号,以便当 Ctrl+C、Node 应用程序退出或服务器重新启动或关闭或任何其他原因节点应用程序退出以触发终止信号并调用此过程和在退出之前在数据库中做一些事情......

我需要添加的终止信号是:

SIGTERM
SIGINT
SIGQUIT
SIGKILL

所以我想到是否可以这样做:

 process.on('SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGKILL', function() {
        /* DO SOME STUFF HERE */

        process.exit()
 })

所以要将多个终止信号传递给进程函数..我在上面添加了这样但它不起作用...如何在节点 js 中完成?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    最简单的方法:

    ['SIGINT', 'SIGTERM', 'SIGQUIT']
      .forEach(signal => process.on(signal, () => {
        /** do your logic */
        process.exit();
      }));
    

    【讨论】:

    • 请注意,'SIGKILL' 不能安装监听器(它会立即抛出错误并终止 Node.js)。 Node.js Signal Events docs。将数组更改为 ['SIGINT', 'SIGTERM', 'SIGQUIT'] 有效。
    • 虽然这可行,但值得注意的是,最好单独定义函数,然后为每个信号使用相同的函数,而不是为每个信号创建新的箭头函数。这并不是什么大问题,更多的是一种最佳实践——特别是因为它允许您在需要时取消注册它们。不过,这很挑剔
    【解决方案2】:

    我宁愿去

    /**
     * Do stuff and exit the process
     */
    function signalHandler() {
        // do some stuff here
        process.exit()
    }
    
    process.on('SIGINT', signalHandler)
    process.on('SIGTERM', signalHandler)
    process.on('SIGQUIT', signalHandler)
    

    出于风格和清晰的原因

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2011-09-11
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多