進程管理是 Linux 系統運維的核心技能。ps、pstree、top 三大經典工具各有專長:ps 靜態快照、pstree 樹狀關係、top 動態監控。本文系統講解三大工具核心參數、輸出解讀與實戰組合技巧。
ps:靜態進程快照
核心選項分類
| 類別 | 選項 | 功能 |
| 進程選擇 | -e / -A | 所有進程 |
-a | 所有終端機的進程(除 session leader) |
x | 無控制終端機的進程(守護進程) |
| 輸出格式 | f | ASCII 藝術樹狀顯示 |
l | 長格式(詳細資訊) |
j | 作業控制格式 |
u | 用戶導向格式(含 CPU/記憶體%) |
o | 用戶自定義格式 -o pid,cmd,%cpu |
| 常用組合 | aux | BSD 風格:所有進程 + 用戶格式 + 無終端機 |
| ef | System V 風格:所有進程 + 樹狀 |
| -C cmd | 按命令名過濾 |
核心輸出欄位解析 ps aux
| 欄位 | 含義 | 關注重點 |
| USER | 啟動進程的用戶 | 權限歸屬 |
| PID | 進程 ID | 唯一標識,殺進程依據 |
| %CPU | CPU 使用率(佔用時間/總時間) | 高佔用進程定位 |
| %MEM | 記憶體使用率 | 記憶體洩漏定位 |
| VSZ | 虛擬記憶體大小 (KB) | 包含保留未用空間 |
| RSS | 常駐集合大小 (KB) | 實際物理記憶體佔用 |
| TTY | 控制終端機 | ? 表示無終端機(守護進程) |
| STAT | 進程狀態碼 | 見下表 |
| START | 啟動時間 | 長期運行進程排查 |
| TIME | 累計 CPU 時間 | 高佔用進程累計負載 |
| COMMAND | 啟動命令 | 含參數完整命令列 |
STAT 狀態碼詳解
| 碼 | 含義 | 常見場景 |
| R | Running/Runnable | 正在運行或等待 CPU |
| S | Sleeping | 可中斷睡眠,等待事件 |
| D | Disk Sleep | 不可中斷睡眠(通常等待 I/O) |
| T | Stopped | 被 job control 停止或被追蹤 |
| Z | Zombie | 殭屍進程,父進程未回收 |
| < | High Priority | 高優先級(nice < 0) |
| N | Low Priority | 低優先級(nice > 0) |
| L | Locked Pages | 鎖定記憶體頁面(實時/鎖頁) |
| l | Multi-threaded | 多執行緒進程 |
| + | Foreground | 前台進程組 |
常用組合範例
# 經典:所有進程完整資訊
ps aux
# 系統 V 風格樹狀
ps -ef
# 自定義輸出:PID、CPU%、記憶體%、命令
ps -eo pid,pcpu,pmem,cmd --sort=-pcpu | head -20
# 查看特定程式(如 httpd)詳細資訊
ps -C httpd -o pid,ppid,user,pcpu,pmem,vsz,rss,cmd
# 只看當前用戶進程
ps -u $(whoami) -o pid,pcpu,pmem,cmd
# 線程級視圖
ps -eLf | grep process_name
pstree:進程關係樹狀圖
核心選項
| 選項 | 功能 |
-p | 顯示 PID |
-u | 顯示用戶名 |
-a | 顯示完整命令行參數 |
-A | 使用 ASCII 字符繪製樹狀(兼容終端) |
-n | 按 PID 排序(預設按名稱) |
-h | 高亮當前進程祖先鏈 |
-H PID | 高亮指定 PID 祖先鏈 |
常用組合
# 完整樹狀圖:PID + 用戶 + 完整命令 + ASCII
pstree -Aup
# 高亮當前 Shell 祖先鏈
pstree -Aup -h
# 高亮指定 PID 祖先
pstree -Aup -H 1234
# 只看特定用戶樹
pstree -Aup -u www-data
top:動態效能監控儀表板
啟動選項
| 選項 | 功能 |
-d sec | 刷新間隔(秒,預設 3.0) |
-n num | 更新次數(預設無限) |
-b | 批次模式(適合腳本/重導向) |
-u user | 只顯示指定用戶進程 |
-p PID | 監控指定 PID |
-H | 顯示線程 |
-c | 顯示完整命令行 |
互動熱鍵速查表
| 按鍵 | 功能 |
| 排序/視圖 | |
P | 按 %CPU 排序(預設) |
M | 按 %MEM 排序 |
N | | 按 PID 排序 |
T | 按 TIME+ 排序 |
>/< | 排序欄位右移/左移 |
f/F | 進入欄位管理(新增/刪除/排序欄位) |
| 篩選/操作 | |
u | 篩選用戶 |
k | 殺死進程(輸入 PID + 信號,預設 SIGTERM=15) |
r | 重新設定 nice 值 |
i | 切換顯示 idle/zombie 進程 |
x/y | 高亮排序欄位/運行進程 |
| 顯示切換 | |
c | 切換命令名/完整命令行 |
l | 切換負載/uptime 顯示 |
t | 切換 CPU/任務摘要顯示 |
m | 切換記憶體摘要顯示 |
1 | 切換單核/總體 CPU 顯示 |
| 配置/幫助 | |
W | 寫入配置到 ~/.toprc |
h/? | 幫助 |
q | 退出 |
進階視圖配置
# 進入 f 選單後:
# 使用 ↑↓ 選擇欄位,Space 選中/取消,s 設為排序欄位
# 常用顯示欄位:PID, USER, PR, NI, VIRT, RES, SHR, S, %CPU, %MEM, TIME+, COMMAND
# 推薦顯示:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
三大工具對比與選用指南
| 工具 | 特性 | 適用場景 | 局限 |
| ps | 靜態快照、豐富格式、腳本友善 | 腳本自動化、精確欄位提取、靜態審計 | 無動態更新、無樹狀關係(需 -f) |
| pstree | 父子關係可視化、極簡輸出 | 理解進程祖先鏈、找父進程、容器 PID 1 排查 | 無資源佔用資訊、無互動 |
| top | 動態即時、互動操作、綜合資源視圖 | 即時效能監控、現場排查、資源佔用排序 | 終端佔用、非腳本友善、歷史無記錄 |
現代替代工具推薦
- htop:彩色互動、滾動、樹狀、滑鼠支援、進程詳情面板
- btop / bpytop:現代化 UI、圖表、GPU/網路/磁碟面板
- glances:跨平台、Web API、匯出、Client/Server 模式
- pidstat:sysstat 套件,進程級歷史統計,適合腳本
- atop:歷史記錄、永久日誌、進程級資源會計
進程狀態排查速查表
| 現象 | STAT | 可能原因 | 排查工具 |
| 高 CPU 佔用 | R | 計算密集/死循環 | top, perf top, strace |
| 不可中斷睡眠 | D | I/O 等待、NFS 掛載失敗、驅動 Bug | iostat, dmesg, strace |
| 殭屍進程 | Z | 父進程未 wait() | ps -eo ppid,pid,stat,cmd | grep Z |
| 高優先級搶佔 | < | nice < 0,實時進程 | ps -eo ni,cmd | sort -n |
| 記憶體增長 | R/S | 記憶體洩漏 | pmap -x PID, valgrind |
總結
ps 精準切片、pstree 關係可視、top 動態監控——三大工具互補,構成進程管理鐵三角。現代運維建議:日常監控用 htop/btop、腳本自動化用 ps/pidstat、關係排查用 pstree、歷史分析用 atop。熟練掌握 STAT 狀態碼、%CPU/%MEM 佔用分析、top 互動熱鍵,能讓您在生產故障現場快速定位問題進程,從容應對各類效能事故。