Linux
Linux作業系統如何關閉?
Gilles 在https://unix.stackexchange.com/a/122667/674上寫了一篇關於 Linux 核心如何關閉的出色回复
我想知道 Linux 作業系統是如何關閉的(在 systemvinit 和 systemd 的情況下)?我期待類似於 Linux 作業系統的啟動順序。我特別想知道程序如何通過 SIGTERM 和 SIGKILL 之類的信號或其他程序間通信方式相互通知?
謝謝。
有關的:
使用兩者
sysvinit
和 systemd,關閉作業系統的第一步是通知init
程序(pid 為 1 的程序)系統應該關閉(或重新啟動,或關閉電源)。
sysvinit
通過使用/run/initctl
FIFO 與 進行通信init
,要求它切換到相應的執行級別來做到這一點。有關簡要概述,init
請參見手冊頁。systemd 支持多種方式來做到這一點。可以使用各種信號來請求關閉、重新啟動等,具有各種風格;也可以通過 d-bus 請求這個(手冊頁解釋瞭
busctl
如何探索它)。一旦要求 pid 1 關閉,它就會遵循其配置和規範,並為它執行所有適當的步驟。這通常包括通知所有使用者正在關閉,關閉所有正在執行的服務(以 systemd 的託管方式;使用各種形式的關閉腳本
sysvinit
),同步已安裝的文件系統,可能解除安裝它們,殺死所有剩餘的程序(使用通常的TERM
thenKILL
序列),最後reboot
使用適當的參數呼叫核心的系統呼叫。這描述了一般順序。這一切還有更多的曲折,包括訪問控制(使用 Polkit)、各種可用
kexec
的鉤子、突然斷電處理、Ctrl``Alt``Del
處理…… systemd 文件涵蓋了許多這些細節。