我對linux進程有疑問
狀況1:(這裡沒有開啟Firefox)
假設如果我使用此命令從命令終端機開啟 Firefox firefox &
,則進程將在背景啟動。
現在如果我退出終端 Firefox 也會退出
狀況2:(這裡已經打開了一個Firefox)
現在,如果我使用此命令從命令終端機開啟 Firefox firefox &
,則進程將在背景啟動。
但現在如果我退出終端,第二個 Firefox(由終端開啟)不會出現任何情況,為什麼?
如果情況 1 會關閉,那麼情況 2 會發生什麼?
答案1
如果情況 2 發生幾乎相同的事情。不同之處在於 Firefox 是一個單一實例應用程序,如果在啟動時發現其副本正在運行,則會執行以下操作:
- 使用以下命令將命令列參數傳送到正在運行的實例工控機
- 退出
這是簡化的演算法,因為某些參數可能導致其他行為,但大多數情況下都以上述方式發生。
因此,在第二種情況下,後台程序存在不到一秒,而先前啟動的 Firefox 實例繼續獨立於終端運行。
答案2
在情況 1 中,您啟動一個「綁定」到終端的全新 firefox 進程,殺死終端,隨後殺死所有綁定的進程
在情況 2 中,即使您啟動 FF 呼叫 & (在後台)FF 已經打開了一個主進程,並且新視窗將作為另一個視窗的「子」視窗打開,因此綁定到該進程而不是終端。因此,殺死終端仍然會殺死所有綁定的進程,而不是 ff ,它不是「他的」孩子