行程與行程抽象

行程樹(process tree)

家譜的頂端有一位始祖,下面的每個人都透過一連串的父與子追溯回他。執行中系統上的行程正好構成這樣一棵樹:根部有一個最初的行程,其他每個行程都從它衍生而來,因為每個行程(除了第一個)都是由某個父行程建立的。行程樹就是這個由所有行程構成、從最初行程開枝散葉的階層。

每個行程恰有一個父行程(透過 fork 建立它的那個行程),並可有任意數量的子行程。把父行程畫在子行程之上,結果就是一棵樹:根部是最初的行程(PID 1,init 或 systemd);它啟動核心服務;那些服務再啟動更多行程;如此向下直到你親自啟動的個別程式。由於每個行程都記錄著它的父行程,作業系統能重建整棵樹,工具也能把它顯示為一個縮排的階層。這棵樹是動態的:行程 fork 時長出枝條,行程退出時枝條被修剪。

行程樹不只是一張圖;它支撐著真實的行為。清理沿著樹進行:父行程回收它的子行程,而當父行程死去時,它變成孤兒的子行程被重新歸屬到 init,以免它們失散。某些信號與資源限制會沿著樹傳播到整片相關行程的子樹。它也解釋了為什麼殺掉父行程本身並不會殺掉子行程——子行程繼續執行,只是被重新歸屬,除非系統被明確告知要終止整個群組。

init(PID 1)啟動一個登入服務,它啟動你的命令列直譯器,直譯器又啟動一個編輯器與一個編譯器。畫成樹,init 是根,編輯器與編譯器是往下好幾層的葉子。

每個行程都能順著一連串的父行程追溯到根部的 PID 1。

殺掉父行程不會自動殺掉它的子行程。子行程繼續執行並被重新歸屬(到 init),除非你明確地向整個行程群組發信號。

又称
process hierarchyprocess family tree行程樹行程階層