当用户在 Ubuntu 中单击重新启动时,操作系统是否会在重新启动之前停止所有 PID?

当用户在 Ubuntu 中单击重新启动时,操作系统是否会在重新启动之前停止所有 PID?

我有一个用 Node.js 编写的服务器,用于监听 SIGTERM 和 SIGINT 事件。我想知道 Ubuntu 是否会在重新启动之前停止所有 PID(或哪些 PID)。例如,如果我的节点进程监听这些事件并希望正常关闭,但正常关闭需要一段时间,那么在操作系统强制终止它之前我还有多长时间。

答案1

如果您选择关闭或重启系统,那么 systemd 将首先向您的进程发送 SIGTERM 信号。如果它在一定时间内没有对 SIGTERM 做出反应,它将发送 SIGINT,如果它仍然没有响应,它最终将发送 SIGKILL。我相信时间分别是 90 秒和 5 分钟,但我找不到相关文档,距离我上次分析关机已经有一段时间了,现在我不想再次分析关机...

答案2

在系统关闭时向所有进程发送信号非常晚。大多数注册进程已经被服务管理器停止。Ubuntu 和其他 Linux 发行版使用 systemd,但也可能使用其他东西,如 Supervisord 或 PM2。

将您的应用程序注册到服务管理器,并将其配置为以所需的行为停止。systemd 服务绝对可以定义停止命令、发送哪些信号以及在发送 kill 之前等待多长时间。

相关内容