在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] 删除。
我来说两句