Linux

關閉父 shell 後程序 PPID 更改為 1

  • October 18, 2018

firefox&打開一個新終端並在裡面輸入命令,ps -l給出:

4 R  1000 23132 23104 99  80   0 - 2177945 -    pts/27   00:00:07 firefox

如果使用該命令關閉 shell exit,則 firefox 子程序保持打開狀態!

總是這樣嗎?Firefox 不應該也關閉嗎?最近的核心中是否有新的東西或我缺少的東西?

結果ps -el|grep firefox是:

4 S  1000 23132     1 14  80   0 - 2233312 poll_s ?      00:00:21 firefox

PPID 已更改為 1。

是什麼導致此 PPID 更改為 1 ?

編輯:哦,我剛剛意識到關閉終端和關閉 shell 有非常不同的結果:關閉終端確實關閉了所有子程序,但不是當 shell 用 exit 命令關閉時……不知道為什麼。(關閉終端正在向所有子程序發送 SIGTERM ?但關閉 shell 會留下孤兒?)

最近的核心中是否有新的東西或我缺少的東西?

不,如果一個程序退出,它的子程序繼續執行,他們的父程序只是被更改為init(PID 1)。或其他一些與系統相關的程序,例如在 Linux 上查找“子收割機”。

情況一直如此,它允許nohup有效地工作,以及通過兩次分叉、呼叫setsid()和退出父程序將程序變成守護程序的陳舊程序。

關閉終端會話可能會發送SIGHUP到那裡的剩餘程序,但他們可以自由地忽略它(這就是這樣nohup做的)。此外,systemd可以配置為在終端登錄會話退出時終止任何揮之不去的程序,但您可能是firefox從終端仿真器在 X 中執行,因此不適用。

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