在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?
发布于 2018-02-24 13:03:53
公认的答案是错误的。
来自https://en.wikipedia.org/wiki/Unix_signal的
SIGTERM 将SIGTERM信号发送到进程以请求其终止...SIGINT与SIGTERM几乎相同。
kill周围的描述不正确。您可以同时捕获它们,并且仍然能够使用SIGKILL - kill -9 pid关闭进程
这是错误的。同样,来自上面的wiki:
终止SIGKILL信号被发送到进程,使其立即终止(
)。与SIGTERM和SIGINT相反,该信号不能被捕获或忽略,并且接收进程在接收到该信号时不能执行任何清理。
所以,总的来说,
SIGINT与SIGTERM几乎完全相同。
https://stackoverflow.com/questions/42450501
复制相似问题