ps 是 Linux 進程管理的基石,雖無 top/htop 的即時互動,但支援豐富的篩選、排序、格式化輸出,極適合腳本化、一次性查詢、歷史記錄。本文系統整理 BSD/UNIX 兩種語法風格、核心參數、實戰範例(依用戶、依名稱、依 CPU/記憶體排序、樹狀父子關係),助您精準掌控進程全貌。
| 風格 | 特徵 | 範例 | 常用系統 |
|---|---|---|---|
| BSD | 選項無連字號 | ps aux | Linux、FreeBSD、macOS |
| UNIX/Linux (POSIX) | 選項有連字號 | ps -ef | Linux、Solaris、AIX |
關鍵差異:ps aux ≠ ps -aux。-u 篩選用戶,u 顯示詳細格式。混用可能導致誤解。本文以 UNIX 風格 (連字號) 為主,並標註 BSD 對應寫法。
| 參數 | 功能 | BSD 對應 |
|---|---|---|
-e / -A | 所有進程 | a (含其他用戶終端機進程) |
-f | 完整格式 (UID, PID, PPID, C, STIME, TTY, TIME, CMD) | u (USER, %CPU, %MEM, VSZ, RSS, STAT, START, TIME, COMMAND) |
-F | 超完整格式 (加上 SZ, RSS, PSR, STIME) | - |
-u user | 指定有效用戶 (可多個逗號分隔) | U user (真實用戶) |
-C cmd | 依命令名稱篩選 | c (只顯示命令名) |
-p pid | 依 PID 篩選 (可多個逗號分隔) | p pid |
--sort=key | 排序鍵,+ 升序、- 降序,可多鍵逗號分隔 | - |
--forest | ASCII 樹狀顯示父子關係 | f (BSD 風格樹狀) |
-o fmt | 自訂輸出格式 (如 pid,user,%cpu,%mem,cmd) | o fmt |
-L | 顯示執行緒 (LWP, NLWP) | H / -L |
ps -ef # UNIX 標準
ps aux # BSD 風格 (含無終端機進程)
ps -ef | less # 分頁瀏覽
ps -f -u www-data
ps -f -u root,www-data,nginx # 多用戶
ps -C nginx
ps -C nginx,php-fpm
ps -p 1234,5678
# CPU 降序、記憶體升序,顯示前 10
ps aux --sort=-%cpu,+%mem | head -10
# 只看前 5 大 CPU 進程
ps aux --sort=-%cpu | head -5
# 自訂格式 + 排序
ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu | head -20
常用排序鍵:%cpu、%mem、pid、ppid、etime (經過時間)、cputime、rss (常駐記憶體)、vsz (虛擬記憶體)。
ps -f --forest -C nginx
ps -ef --forest | grep -E 'nginx|apache'
# 輸出範例:
# root 1234 1 0 09:00 ? 00:00:00 nginx: master process
# www-data 1235 1234 0 09:00 ? 00:00:00 \_ nginx: worker process
# www-data 1236 1234 0 09:00 ? 00:00:00 \_ nginx: worker process
注意:--sort 與 --forest 邏輯衝突(排序會破壞樹狀順序),勿同時使用。
ps -Lf -p # 顯示指定進程的所有執行緒
ps -eLf | grep # 全系統執行緒視圖
# 關鍵欄位:LWP (執行緒 ID)、NLWP (執行緒總數)
ps -eo pid,ppid,user,group,%cpu,%mem,vsz,rss,stat,start,time,cmd --sort=-%cpu
# 輸出可直接餵給 awk/csvtool
ps -eo stat,pid,ppid,cmd | awk '$1 ~ /^Z/ {print}'
# STAT 欄位 Z = 僵屍
ps aux --sort=-rss | head -20
watch -n 2 'ps aux --sort=-%cpu | head -20'
watch -n 5 'ps -ef --forest | grep nginx'
ps 顯示 UID 而非名稱。用 -o user=USER 強制寬欄或 ps -eo user:20 指定寬度。ps -ef --forest 正確;ps --forest -ef 可能報錯(部分版本)。ps 是快照,非即時。需即時監控請用 top/htop/pidstat。| 工具 | 適用場景 |
|---|---|
ps | 一次性查詢、腳本抓取、精細篩選/排序/格式化、樹狀父子關係 |
top | 互動式即時監控、快速找熱點進程 |
htop | 增強版 top:滾動、搜尋、樹狀、殺進程、更好 UI |
pidstat | 腳本化定期採樣、執行緒級 CPU/記憶體、歷史趨勢 |
熟練 ps 的篩選、排序、樹狀、自訂格式,配合 grep/awk/watch,讓進程管理從「看一眼」進化為「精準查詢、自動化巡檢、異常自動告警」的專業運維工作流。