javascript - Node.js 在接收 SIGTERM 时的默认行为是什么?
问题描述
我一直在阅读文档,但没有明确说明如果没有注册信号处理程序,Node.js 进程是否立即退出。例如,轮询队列中的待处理任务是否已执行或是否所有内容都已删除?程序员是否总是必须通过跟踪所有待处理的 Promise 来显式地处理正常关闭?
解决方案
当没有添加处理程序时SIGTERM
,节点将重置终端并立即退出进程。这是一个“把所有东西都放在原处”的出口。甚至比process.exit
which 仍然允许exit
事件触发更重要:
调用
process.exit()
将强制进程尽快退出,即使仍有尚未完全完成的异步操作挂起,包括对process.stdout
和的 I/O 操作process.stderr
。
添加信号处理程序时 ( process.once('SIGTERM')
,处理程序代码被安排用于下一个事件循环。因此即使您只是调用process.exit()
处理程序,行为也会立即改变。
Promise 或一般的 Javascript 还没有内置取消的概念。您可以跟踪承诺,但除非使用底层 API 专门解决取消任务的方法,否则没有什么可做的。
不过你可以等。在一般的 Web 应用程序中,如果您关闭 Web 服务器并关闭数据库连接。现有连接将完成,不会启动新连接,最终当事件循环上没有任何东西可以运行时,进程将自行退出。wtfnode
可以方便地帮助调试最终不会像这样退出的进程。
推荐阅读
- c# - 使用 WCF 服务参考为 Office 加载项制作安装程序
- typescript - 打字稿中的可选泛型
- arrays - 创建一个空的二维数组
- python - 如何管理用于回归的大型数据集?
- javascript - Google表格 - Javascript在编辑时向右移动光标
- javascript - Chart.js 两个 y 轴折线图工具提示值对于第二个 y 轴不正确
- mqtt - 库迁移到 AndroidX
- html - 如何在 Angular 上呈现原始 HTML
- sql - 即使表 2 没有匹配的记录,也从表 1 返回记录
- java - 使用转换器和提供者而不是属性映射时如何让 ModelMapper.validate() 成功?