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