Node.js在收到SIGTERM信号时的默认行为是什么?

7 浏览
0 Comments

Node.js在收到SIGTERM信号时的默认行为是什么?

我一直在阅读文档,但没有明确说明如果没有注册信号处理程序,Node.js 进程是否立即退出。例如,等待执行的任务是否在 轮询队列 中执行,还是所有东西都被丢弃了?程序员是否总是必须通过跟踪所有未决承诺来明确处理优雅的关闭?

admin 更改状态以发布 2023年5月24日
0
0 Comments

当没有为 SIGTERM 添加处理程序时,Node 将重置终端并立即退出该进程。这是一种“放弃当前一切”的退出方式。比 process.exit 更加强硬,后者仍允许 exit 事件触发:

调用 process.exit() 将强制进程尽快退出,即使还有一些未完成的异步操作,其中包括对 process.stdoutprocess.stderr 的 I/O 操作。

当添加了一个信号处理程序 (process.once('SIGTERM')),处理程序代码将被调度到下一个事件循环。因此,即使在处理程序中只是调用了 process.exit(),行为也会立即改变。

Promise 或者 Javascript 通常情况下没有内置的“取消”概念。您可以追踪 Promise,但是除非正在使用的底层 API 具体解决取消任务的方法,否则没有太多可以做的。

您可以等待。在平均 Web 应用程序中,如果关闭 Web 服务器并关闭数据库连接,则现有连接将完成,不会启动新连接,最终,当事件循环上没有剩余可运行的内容时,该进程将自动退出。 wtfnode 可以方便地帮助调试没有自动退出的进程。

0