Root
root可以殺死init程序嗎?
root 可以殺死 init 程序(pid 為 1 的程序)嗎?它的後果是什麼?
預設情況下,不,這是不允許的。在 Linux 下(來自
man 2 kill
):唯一可以發送到程序 ID 1(即 init 程序)的信號是那些 init 已為其顯式安裝信號處理程序的信號。這樣做是為了確保系統不會意外關閉。
Pid 1 (init) 可以決定允許自己被殺死,在這種情況下,“殺死”基本上是請求它關閉自己。這是實現該
halt
命令的一種可能方式,儘管我不知道有任何init
這樣做。在 Mac 上,
launchd
使用信號 15 (SIGTERM) 殺死(它的 init 模擬)將立即重新啟動系統,而無需費心徹底關閉正在執行的程序。用無法擷取的信號 9 (SIGKILL) 殺死它什麼也沒做,這表明 Mac 的kill()
語義在這方面與 Linux 的語義相同。目前,我手頭沒有一個我願意嘗試的 Linux 機器,所以 Linux 對
init
SIGTERM 做什麼的問題將不得不等待。 如今,隨著init
Upstart 和 Systemd 等替代項目的流行,答案可能會有所不同。更新:在 Linux 上,
init
明確忽略 SIGTERM,所以它什麼也不做。@jsbillings 有關於Upstart 和 Systemd 做什麼的資訊。