ps — 顯示執行中的程序清單

顯示系統執行中的程序快照,含 PID、CPU、記憶體等資訊。

語法

ps [選項]

常用選項

選項 說明 範例
aux 顯示所有使用者的所有程序(最常用) ps aux
-ef 完整格式顯示所有程序(PPID 親子關係更清晰) ps -ef
-u 使用者 只顯示指定使用者的程序 ps -u www-data
-p PID 只顯示指定 PID 的程序 ps -p 1234
--forest 以樹狀結構顯示程序的親子關係 ps auxf
-o 格式 自訂輸出欄位 ps -eo pid,user,cmd
--sort=欄位 依指定欄位排序(+升序/-降序) ps aux --sort=-%mem

使用範例

範例 1:顯示所有程序(最常用)

ps aux 是最常用的組合,顯示所有使用者的所有程序,含詳細資訊。

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 225384  9128 ?        Ss   08:00   0:01 /sbin/init
www-data  1234  0.2  1.5 512000 31000 ?        S    09:00   0:05 nginx: worker
範例 2:搜尋特定程序

搭配 grep 找出特定名稱的程序,但注意 grep 本身也會出現在結果中。

$ ps aux | grep nginx
www-data  1234  0.2  1.5  nginx: worker process
user      5678  0.0  0.0  grep --color=auto nginx
若要排除 grep 自身,可用 grep -v grep 或改用 pgrep nginx。
範例 3:依記憶體使用排序

使用 --sort=-%mem 顯示記憶體使用最多的程序在前。

$ ps aux --sort=-%mem | head -10
USER       PID %CPU %MEM    VSZ   RSS COMMAND
mysql     2345  0.5 15.2 1024000 312000 /usr/sbin/mysqld
範例 4:以樹狀顯示親子關係

使用 --forest(或 f 選項)以縮排樹狀圖顯示程序的親子關係。

$ ps auxf | grep -A 5 sshd
root      1001  sshd: /usr/sbin/sshd -D
root      2001  \_ sshd: user [priv]
user      2002      \_ sshd: user@pts/0
user      2003          \_ -bash
user      2004              \_ ps auxf
範例 5:自訂輸出欄位

使用 -o 只顯示需要的欄位,適合腳本解析。

$ ps -eo pid,ppid,user,%cpu,%mem,cmd --sort=-%cpu | head -10
  PID  PPID USER     %CPU %MEM CMD
 1234     1 www-data  2.5  1.5 nginx: worker
 5678     1 mysql     0.8 15.2 /usr/sbin/mysqld

常見錯誤與排錯

error: garbage option
原因
ps 選項格式有 BSD 和 SysV 兩種風格,混用時會出錯。aux 不加 -,-ef 加 -。
解法
使用標準格式:ps aux(BSD風格)或 ps -ef(SysV風格),不要混用。

延伸閱讀