关闭时 SIGTERM 和 SIGKILL 之间的延迟是多少?

Hub*_*iak 5 shutdown sigkill sigterm

当类 Unix 系统正常关闭时,例如使用halt、等或 GUI 等效项,它将首先尝试通过向所有进程发出 SIGTERM 信号来优雅地退出它们shutdownpoweroff一段时间后,它会向仍在运行的程序发送 SIGKILL。

这个延迟是多长时间?程序需要多少时间才能正常退出?如果系统之间有所不同,我想知道 Ubuntu 服务器的具体默认设置。

编辑:这是 Systemd 90 年代的延迟吗?

Hax*_*iel 5

Systemd 服务可以指定自己的启动和关闭超时值。如果未指定,则从 systemd 配置文件设置值。配置文件中设置的默认启动和关闭时间均为 90 秒。

systemd.service 的手册页中:

TimeoutStopSec=

此选项有两个目的。首先,它配置等待每个命令的时间ExecStop=。如果其中任何一个超时, ExecStop=则跳过后续命令,并且服务将被终止 SIGTERM。如果未ExecStop=指定命令,服务会SIGTERM立即获取命令。其次,它配置等待服务本身停止的时间。如果它没有在指定的时间内终止,它将被强制终止SIGKILL(参见 KillMode=systemd.kill(5))。采用以秒为单位的无单位值,或时间跨度值,例如“5min 20s”。通过"infinity"禁用超时逻辑。默认来自DefaultTimeoutStopSec=管理器配置文件(请参阅 systemd-system.conf(5))。

systemd-system.conf 的手册页来看:

DefaultTimeoutStartSec=, DefaultTimeoutStopSec=,DefaultRestartSec=

配置启动和停止单元的默认超时,以及单元自动重新启动之间的默认休眠时间,如 中每个单元的配置TimeoutStartSec=TimeoutStopSec=以及 RestartSec=(对于服务,请参阅 systemd.service(5) 以了解有关每个单元的详细信息)单位设置)。Type=oneshot当使用服务 with 时,默认禁用 。对于非服务单位, DefaultTimeoutStartSec=设置默认TimeoutSec=值。 DefaultTimeoutStartSec=DefaultTimeoutStopSec=默认为 90 秒。 DefaultRestartSec=默认为 100 毫秒。