Ale*_*lls 11 sigint node.js sigterm
在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();
});
Run Code Online (Sandbox Code Playgroud)
我能够捕获两个信号并阻止退出吗?我的实验表明答案是肯定的,但从我读过的内容来看,SIGINT总是假设关闭一个进程.
或者我可能会把SIGINT与SIGKILL混淆?也许SIGKILL是我无法恢复的信号?
捕获这些信号当然可以让我优雅地关闭:
server.once('close', function(){
// do some other stuff
process.exit(2); // or whatever code pertains
});
Run Code Online (Sandbox Code Playgroud)
我想SIGINT与SIGKILL混淆了 -
如果我尝试这样做:
process.once('SIGKILL', function (code) {
console.log('SIGKILL received...');
exitCode = code || 2;
server.close();
});
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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)
Run Code Online (Sandbox Code Playgroud)
显然你不允许捕获SIGKILL信号,但你可以捕获SIGINT和SIGTERM?
xpt*_*xpt 16
接受的答案是错误的.
SIGTERM SIGTERM信号被发送到进程以请求终止... SIGINT几乎与SIGTERM相同.
kill不正确.您可以捕获它们并仍然能够使用SIGKILL关闭进程 - kill -9 pid
那是错的.再次,从维基上面:
所述SIGKILL信号被发送到一个进程,以使其立即终止(杀死).与SIGTERM和SIGINT相反,此信号无法捕获或忽略,接收过程无法在接收到此信号时执行任何清理.
总而言之,
SIGINT几乎与SIGTERM相同.
来自https://en.wikipedia.org/wiki/Unix_signal
SIGINT由用户按下生成Ctrl+C并且是interrupt
SIGTERM是发送请求进程终止的信号.kill命令发送一个SIGTERM,它是一个terminate
您可以捕获它们并仍然可以使用SIGKILL- 关闭该过程-kill -9 pid
| 归档时间: |
|
| 查看次数: |
10546 次 |
| 最近记录: |