Linux
關閉父 shell 後程序 PPID 更改為 1
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 中執行,因此不適用。