Shutdown

SIGTERM 和 SIGKILL 之間的延遲是多少?

  • February 26, 2019

當類 Unix 系統正常關閉時,例如使用halt,shutdownpoweroff或 GUI 等價物,它會首先通過向所有程序發出 SIGTERM 信號來嘗試優雅地退出所有程序。一段時間後,它將向仍在執行的程序發送 SIGKILL。

這延遲多長時間?程序需要多長時間才能優雅退出?如果這在系統之間有所不同,我想知道 Ubuntu 伺服器的特定預設設置。

編輯:是這裡描述的 Systemd 的 90 年代延遲

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) 以獲取有關 per- 的詳細資訊)單位設置)。使用service with 時預設禁用 Type=oneshot。對於非服務單位, DefaultTimeoutStartSec=設置預設TimeoutSec=值。 DefaultTimeoutStartSec=DefaultTimeoutStopSec=預設為 90 年代。 DefaultRestartSec=預設為 100 毫秒。

引用自:https://unix.stackexchange.com/questions/503058