Linux pstree 以樹狀圖顯示行程相關性指令教學

本篇介紹如何在 Linux 中使用 pstree 指令,以樹狀圖的方式顯示系統各行程之間的相關性。

在管理 Linux 系統時,有時候會需要釐清多個行程(processes)之間的關係,這時候就可以使用 pstree 這個指令,以樹狀圖來呈現多個行程的關係圖。


我自己最常遇到的問題就是在用多條 SSH 登入主機後,其中有一條 SSH 的網路斷了,想要把斷線的 SSH 相關的行程砍掉(kill),但是因為系統上的 SSH 登入行程有很多個,不是很容易判斷斷線 SSH 連線的 PID,若要確認正確的 PID,最方便的方式就是使用 pstree 來檢查。

pstree 指令基本用法

直接執行 pstree 不加任何參數的話,就會以樹狀圖顯示整個系統上每個行程之間的從屬關係:

pstree

pstree 樹狀圖

pstree 的輸出預設會將相同名稱的行程合併成一個節點來顯示,例如:

init-+-getty
     |-getty
     |-getty
     `-getty

合併之後,就會變成:

init---4*[getty]

另外大括號則是代表子執行緒的意思。

顯示指令參數

如果要顯示每個行程指令的完整參數,可以加上 -a 參數:

pstree -a

顯示指令參數

顯示行程 ID(PID)

若要顯示每個行程的 ID(PID),可以加上 -p 參數:

pstree -p

顯示行程 ID(PID)

加上 -p 參數之後,在輸出時就不會將相同名稱的行程合併了,所以輸出的樹狀圖看起來會比較長。

以 PID 排序

pstree 的輸出預設會以行程的名稱來排序,若要以 PID 來排序,可以加上 -n 參數,而通常在這種狀況下,我們也會同時加上 -p 參數,顯示行程的 PID:

pstree -np

以 PID 排序

顯示特定使用者行程

若只想看某個特定使用者所執行的程式時,可以在 pstree 的參數中直接指定使用者的帳號名稱,這樣就會只顯示屬於該使用者的行程:

pstree gtwang

顯示特定使用者行程

顯示特定 PID 行程

如果想要查看特定 PID 的行程,也可以在 pstree 的參數中指定 PID,這樣就會以該行程為起始點,顯示以下的行程樹狀圖,而通常在這種狀況下,我們也會同時加上 -p 參數,顯示行程的 PID:

pstree -p 2468

顯示特定 PID 行程

而如果想要查看該行程上面的父行程,可以再加上一個 -s 參數:

pstree -ps 2468

顯示特定 PID 行程的父行程

標示改變 UID 的行程

在大部分的狀況下,一個行程在建立子行程的時候,會維持相同的使用者 ID(UID),而在某些時候子行程的 UID 會改變,若想要在 pstree 的輸出中標示出改變 UID 的行程,可以加上 -u 參數。

pstree -u

標示改變 UID 的行程

加上 -u 參數之後,若遇到有變更 UID 的行程,就會以小括號標示新的使用者帳號名稱,例如 upstart(gtwang) 就是代表該行程的使用者變更為 gtwang。若沒有標示的行程,則代表沿用父行程的 UID。

標示特定行程

若要在 pstree 的輸出中,以高亮度標示指定的行程,可以使用 -H 參數,並加上行程的 PID:

pstree -pH 1663

標示特定行程

參考資料:HowtoForge鳥哥的 Linux 私房菜

Linux

Comments are Closed