首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕捉SIGTERM vs捕捉SIGINT

捕捉SIGTERM vs捕捉SIGINT
EN

Stack Overflow用户
提问于 2017-02-25 08:31:19
回答 1查看 25K关注 0票数 22

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

我认为进程不应该能够防止在SIGINT时关闭?

代码语言:javascript
复制
  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是我无法恢复的信号?

当然,捕获这些信号可以让我优雅地关闭:

代码语言:javascript
复制
server.once('close', function(){
    // do some other stuff
    process.exit(2); // or whatever code pertains
});

我想我把SIGINT和SIGKILL搞混了

如果我尝试这样做:

代码语言:javascript
复制
 process.once('SIGKILL', function (code) {
    console.log('SIGKILL received...');
    exitCode = code || 2;
    server.close();
  });

我得到了这个错误:

代码语言:javascript
复制
 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?

EN

回答 1

Stack Overflow用户

发布于 2018-02-24 13:03:53

公认的答案是错误的。

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

SIGTERM 将SIGTERM信号发送到进程以请求其终止...SIGINT与SIGTERM几乎相同。

  1. 命令kill周围的描述不正确。

您可以同时捕获它们,并且仍然能够使用SIGKILL - kill -9 pid关闭进程

这是错误的。同样,来自上面的wiki:

终止SIGKILL信号被发送到进程,使其立即终止(

)。与SIGTERM和SIGINT相反,该信号不能被捕获或忽略,并且接收进程在接收到该信号时不能执行任何清理。

所以,总的来说,

SIGINT与SIGTERM几乎完全相同。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42450501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档