Root

root可以殺死init程序嗎?

  • February 11, 2021

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 對initSIGTERM 做什麼的問題將不得不等待。 如今,隨著initUpstart 和 Systemd 等替代項目的流行,答案可能會有所不同。

更新:在 Linux 上,init明確忽略 SIGTERM,所以它什麼也不做。@jsbillings 有關於Upstart 和 Systemd 做什麼的資訊。

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