前言
在 Linux 系統管理與開發過程中,我們經常需要監控或調試程序的運行狀態。雖然 ps 指令能列出詳細的進程資訊,但當系統中同時運行著數百個進程時,扁平的列表往往讓人難以理清它們之間的父子關係(Parent-Child Relationship)。這時,pstree 指令便成了展現進程層次結構的利器。它能夠以樹狀圖的形式直觀地呈現進程的繼承關係,讓系統架構一目了然。本文将深入解析 pstree 的用法、選項與實際應用場景。
基本用法與預設輸出
pstree 指令通常包含在 psmisc 套件中。在 Ubuntu 或 Debian 系統上,若未安裝可透過以下指令安裝:
sudo apt update
sudo apt install psmisc
最基本的用法是直接執行 pstree,它會顯示當前用戶啟動的所有進程樹,並從 init 或 systemd 作為根節點開始展開。
pstree
輸出結果類似於以下結構(簡化版):
systemd───(sd-resolve)───{sd-resolve}
├── NetworkManager───{NetworkManager}
├── nginx───nginx───nginx───nginx───nginx
│ └── nginx───nginx
├── sshd───sshd───bash───pstree
└── Xorg───Xorg
從輸出中我們可以清楚看到,sshd 衍生出了另一個 sshd,而該進程又啟動了 bash,最後才是我們執行的 pstree。這種視覺化的連結對於理解程序 spawned(衍生)的路徑至關重要。
進階選項解析
為了滿足不同的調試需求,pstree 提供了多個實用的選項。
顯示進程 PID
預設情況下,pstree 僅顯示程序名稱。若需識別特定的進程 ID(PID),可以使用 -p 選項。這在需要發送訊號(如 kill)或進行進程追蹤時非常有用。
pstree -p
輸出範例:
systemd(1)─┬─NetworkManager(842)───{NetworkManager}(848)
├─nginx(1204)───nginx(1205)
└─sshd(1300)───sshd(1450)───bash(1451)───pstree(2024)
注意括號內的數字即為 PID,這讓我們能精確定位到每一個節點。
依用戶過濾顯示
當系統服務繁多時,查看特定用戶(如 www-data 或 root)的進程樹會更有針對性。使用 -u 選項並搭配用戶名,可以過濾出該用戶下的進程樹。
pstree -u www-data
若該用戶下有多個進程,輸出會顯示:
www-data───nginx───nginx───nginx
這有助於快速確認 Web 伺服器是否異常,或檢查是否有未授權的進程以該身份運行。
合併相同進程
當某個服務啟動了多個相同的子進程(例如 Nginx 的 worker processes)時,預設輸出會重複列出進程名稱,導致樹狀圖過長且難以閱讀。使用 -c 選項可以合併相同名稱的進程,使輸出更為精簡。
pstree -c
輸出範例:
systemd───nginx───[nginx]
這裡的 [nginx] 表示有多個同名的 nginx 進程被合併顯示,這在查看高負載伺服器時能大幅減少螢幕佔用空間。
顯示完整命令列
有時僅看進程名稱不足以區分功能相似的進程(例如多個 Python 腳本)。使用 -f 選項可以顯示完整的命令列參數。
pstree -f
輸出範例:
systemd
└─nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─nginx: worker process
常見問題與注意事項
1. pstree 無法顯示所有系統進程
預設情況下,pstree 只會顯示當前用戶啟動的進程樹,或是以 init/systemd 為根的整個系統樹(取決於版本與權限)。若你發現某些進程未顯示,請嘗試使用 sudo pstree 以提升權限,這樣可以看到整個系統的所有進程樹,而不僅限於當前使用者的子樹。
2. 樹狀符號在不同終端顯示異常
pstree 使用 Unicode 或 ASCII 字符來繪製連接線。在某些老舊的終端模擬器或編碼設定錯誤的環境中,可能會顯示為亂碼或方塊。若遇到此問題,可嘗試添加 -A(ASCII 模式)或 -L(直線模式)選項來強制使用標準 ASCII 字符繪製樹狀圖,確保在所有環境下都能正確閱讀。
小結
pstree 是一個輕量級但極具視覺效果的 Linux 指令。它不僅能幫助系統管理員快速掌握進程的層級結構,還能透過 -p、-u、-c 等選項靈活應對不同的調試場景。對於習慣使用 ps 或 top 的使用者而言,偶爾切換到 pstree 的視角,往往能帶來意想不到的排查靈感。建議在日常維護中,將 pstree 納入你的工具包,特別是在分析服務依賴關係或排查異常進程時,它將是你不可或缺的得力助手。