赶上SIGTERM与赶上SIGINT

亚历山大·米尔斯

在Node.js服务器中,捕获SIGTERM与捕获SIGINT有什么区别?

我认为进程不应该能够防止SIGINT上的关机?

  process.once('SIGINT', function (code) {
    console.log('SIGINT received...');
    server.close();
  });

 // vs.

  process.once('SIGTERM', function (code) {
    console.log('SIGTERM received...');
    server.close();
  });

我可以同时捕获两个信号并防止退出吗?我的实验表明答案是肯定的,但是据我所读,SIGINT总是假设要关闭进程。

或者,也许我将SIGINT与SIGKILL混淆了?也许SIGKILL是我无法恢复的信号?

捕获这些信号当然可以让我正常关闭:

server.once('close', function(){
    // do some other stuff
    process.exit(2); // or whatever code pertains
});

我想我将SIGINT与SIGKILL混淆了-

如果我尝试这样做:

 process.once('SIGKILL', function (code) {
    console.log('SIGKILL received...');
    exitCode = code || 2;
    server.close();
  });

我收到此错误:

 internal/process.js:206
        throw errnoException(err, 'uv_signal_start');
        ^
    Error: uv_signal_start EINVAL
        at exports._errnoException (util.js:1022:11)
        at process.<anonymous> (internal/process.js:206:15)
        at emitTwo (events.js:106:13)
        at process.emit (events.js:191:7)
        at _addListener (events.js:226:14)
        at process.addListener (events.js:275:10)
        at process.once (events.js:301:8)

因此,显然不允许您捕获SIGKILL信号,但是可以捕获SIGINT和SIGTERM?

吉姆·因子

https://en.wikipedia.org/wiki/Unix_signal

SIGINT由用户按Ctrl+生成C,是interrupt

SIGTERM是发送以请求进程终止的信号。kill命令发送一个SIGTERM,它是一个terminate

您可以同时捕获SIGTERM和,SIGINT并且始终可以使用SIGKILL结束该过程kill -9 [pid]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章