我一直在阅读文档,但并没有明确说明如果没有注册信号处理程序,Node.js进程是否会立即退出。例如,轮询队列中的待定任务是否会执行,还是所有内容都被丢弃?程序员是否总是需要通过跟踪所有待处理的 Promise 明确地处理优雅关闭?
我一直在阅读文档,但并没有明确说明如果没有注册信号处理程序,Node.js进程是否会立即退出。例如,轮询队列中的待定任务是否会执行,还是所有内容都被丢弃?程序员是否总是需要通过跟踪所有待处理的 Promise 明确地处理优雅关闭?
SIGTERM
添加处理程序时,Node.js 将重置终端并立即退出进程。这是一个“放弃一切”的退出方式。比 process.exit
(它仍允许exit
事件发生) 更加如此:
调用
process.exit()
将强制进程尽快退出,即使仍有未完成的异步操作,包括对process.stdout
和process.stderr
的 I/O 操作。
当添加信号处理程序 (process.once('SIGTERM')
) 时,处理程序代码将被安排在下一个事件循环中执行。因此,即使您只是在处理程序中调用 process.exit()
,行为也会立即更改。
Promise 或 JavaScript 通常还没有内置取消概念。您可以跟踪 Promise,但除非正在使用的底层 API 明确解决了取消任务的方法,否则不会有太多事情可以做。
你可以等待。在普通的Web应用程序中,如果关闭Web服务器和数据库连接,则现有连接将完成,不会启动新连接,最终当事件循环上没有要运行的内容时,进程会自行退出。wtfnode
可以帮助调试这样没有最终退出的进程。