![关闭时 SIGTERM 和 SIGKILL 之间的延迟是多少?](https://linux22.com/image/148868/%E5%85%B3%E9%97%AD%E6%97%B6%20SIGTERM%20%E5%92%8C%20SIGKILL%20%E4%B9%8B%E9%97%B4%E7%9A%84%E5%BB%B6%E8%BF%9F%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F.png)
当类 Unix 系统正常关闭时,例如使用halt
、shutdown
等poweroff
或 GUI 等效项,它将首先尝试通过向所有进程发出 SIGTERM 信号来优雅地退出它们。一段时间后,它会向仍在运行的程序发送 SIGKILL。
这个延迟是多长时间?程序需要多少时间才能正常退出?如果系统之间有所不同,我想知道 Ubuntu 服务器的具体默认设置。
编辑:是否如描述的那样 Systemd 的 90 年代延迟这里?
答案1
Systemd 服务可以指定自己的启动和关闭超时值。如果未指定,则从 systemd 配置文件设置值。配置文件中设置的默认启动和关闭时间均为 90 秒。
TimeoutStopSec=
此选项有两个目的。首先,它配置等待每个
ExecStop=
命令的时间。如果其中任何一个超时,则ExecStop=
跳过后续命令,并且服务将被终止SIGTERM
。如果没有ExecStop=
指定命令,服务会SIGTERM
立即获取。其次,它配置等待服务本身停止的时间。若未在规定时间内终止,将被强制终止SIGKILL
(参见KillMode=
systemd.kill(5))。采用以秒为单位的无单位值,或时间跨度值,例如“5min 20s”。通过"infinity"
禁用超时逻辑。默认DefaultTimeoutStopSec=
来自管理器配置文件(参见 systemd-system.conf(5))。
DefaultTimeoutStartSec=
,DefaultTimeoutStopSec=
,DefaultRestartSec=
配置启动和停止单元的默认超时,以及单元自动重新启动之间的默认睡眠时间,如和
TimeoutStartSec=
中每个单元配置的那样(对于服务,请参阅 systemd.service(5) 以了解有关每个单元设置的详细信息)。当使用服务 with 时,默认禁用 。对于非服务单位, 设置默认值。TimeoutStopSec=
RestartSec=
Type=oneshot
DefaultTimeoutStartSec=
TimeoutSec=
DefaultTimeoutStartSec=
并DefaultTimeoutStopSec=
默认为 90 秒。DefaultRestartSec=
默认为 100 毫秒。