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風格),不要混用。