本篇介紹如何在 Linux 中使用 pstree 指令,以樹狀圖的方式顯示系統各行程之間的相關性。
在管理 Linux 系統時,有時候會需要釐清多個行程(processes)之間的關係,這時候就可以使用 pstree 這個指令,以樹狀圖來呈現多個行程的關係圖。
pstree 來檢查。
pstree 指令基本用法直接執行 pstree 不加任何參數的話,就會以樹狀圖顯示整個系統上每個行程之間的從屬關係:
pstree
pstree 的輸出預設會將相同名稱的行程合併成一個節點來顯示,例如:
init-+-getty
|-getty
|-getty
`-getty
合併之後,就會變成:
init---4*[getty]
另外大括號則是代表子執行緒的意思。
如果要顯示每個行程指令的完整參數,可以加上 -a 參數:
pstree -a
若要顯示每個行程的 ID(PID),可以加上 -p 參數:
pstree -p
加上 -p 參數之後,在輸出時就不會將相同名稱的行程合併了,所以輸出的樹狀圖看起來會比較長。
pstree 的輸出預設會以行程的名稱來排序,若要以 PID 來排序,可以加上 -n 參數,而通常在這種狀況下,我們也會同時加上 -p 參數,顯示行程的 PID:
pstree -np
若只想看某個特定使用者所執行的程式時,可以在 pstree 的參數中直接指定使用者的帳號名稱,這樣就會只顯示屬於該使用者的行程:
pstree gtwang
如果想要查看特定 PID 的行程,也可以在 pstree 的參數中指定 PID,這樣就會以該行程為起始點,顯示以下的行程樹狀圖,而通常在這種狀況下,我們也會同時加上 -p 參數,顯示行程的 PID:
pstree -p 2468
而如果想要查看該行程上面的父行程,可以再加上一個 -s 參數:
pstree -ps 2468
在大部分的狀況下,一個行程在建立子行程的時候,會維持相同的使用者 ID(UID),而在某些時候子行程的 UID 會改變,若想要在 pstree 的輸出中標示出改變 UID 的行程,可以加上 -u 參數。
pstree -u
加上 -u 參數之後,若遇到有變更 UID 的行程,就會以小括號標示新的使用者帳號名稱,例如 upstart(gtwang) 就是代表該行程的使用者變更為 gtwang。若沒有標示的行程,則代表沿用父行程的 UID。
若要在 pstree 的輸出中,以高亮度標示指定的行程,可以使用 -H 參數,並加上行程的 PID:
pstree -pH 1663
參考資料:HowtoForge、鳥哥的 Linux 私房菜