ps 是 Process Status(进程状态)的缩写,它用于报告当前系统中正在运行的进程的快照信息,与 top 或 htop 这种实时监控工具不同,ps 通常显示的是在它执行那一刻的进程状态。

ps 命令的基本用法
ps 命令的强大之处在于其灵活的选项,我们可以通过不同的选项组合来获取不同格式的信息,最常见的用法分为三类:Unix 风格、BSD 风格和GNU 长选项风格。
a) 最常用的 Unix 风格选项(推荐)
这是最常用、最标准的用法,通常以 开头。
ps aux
这是查看所有进程的经典组合,几乎在所有 Unix/Linux 系统上都可用。
a: 显示所有进程,而不仅仅是当前终端(TTY)下的进程。u: 以用户为中心的格式显示,显示用户名、CPU 和内存占用等。x: 显示没有控制终端(TTY)的进程,例如守护进程(daemons)。
示例输出:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19356 1544 ? Ss May30 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S< May30 0:00 [kthreadd]
...
root 1234 0.1 0.5 123456 54321 ? Sl 10:30 0:10 /usr/sbin/nginx -g daemon on;
myuser 5678 0.5 1.2 876543 234567 pts/0 Ss+ 11:00 0:55 /usr/bin/python3 my_script.py
各列含义:
USER: 进程所有者的用户名。PID: 进程 ID (Process ID)。%CPU: 进程使用的 CPU 百分比。%MEM: 进程使用的物理内存百分比。VSZ: 虚拟内存大小 (Virtual Size)。RSS: 驻留集大小 (Resident Set Size),即进程占用的物理内存。TTY: 进程运行的终端。 表示没有终端。STAT: 进程状态。S: 睡眠状态 (Sleeping)R: 运行或就绪状态 (Running/Runnable)D: 不可中断的睡眠状态 (Uninterruptible Sleep)Z: 僵尸进程 (Zombie)s: 是会话领导者 (session leader)l: 多线程进程- 前台进程组
START: 进程启动时间。TIME: 进程累计使用的 CPU 时间。COMMAND: 启动进程的命令。
ps -ef
这是另一种查看所有进程的常用组合,尤其在 System V 风格的系统上。
-e: 显示所有进程。-f: 以完整的格式(full format)显示。
示例输出:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 May30 ? 00:00:01 /sbin/init
root 2 0 0 May30 ? 00:00:00 [kthreadd]
...
root 1234 1 0 10:30 ? 00:00:10 /usr/sbin/nginx -g daemon on;
myuser 5678 1234 0 11:00 pts/0 00:00:55 /usr/bin/python3 my_script.py
各列含义:

UID: 用户 ID。PID: 进程 ID。PPID: 父进程 ID (Parent PID)。C: CPU 使用率(在较新的系统中可能不准确)。STIME: 启动时间。TTY: 终端。TIME: 累计 CPU 时间。CMD: 启动命令。
b) BSD 风格选项
BSD 风格的选项通常不带 ,并且更简洁。
ps aux 实际上是 Unix 风格 (ps -aux) 和 BSD 风格 (ps aux) 的混合,在 Linux 中,ps aux 会自动识别并采用 BSD 风格的输出格式。
ps auxww
在 ps aux 的基础上,ww 选项会强制 ps 显示完整的命令行,即使它非常长。
c) GNU 长选项风格
这是最清晰、最易读的风格,选项以 开头,通常与 xargs 结合使用。
ps --forest
以树状结构显示进程,非常直观地展示了父子进程关系。
示例输出:
PID PPID COMMAND
1 0 /sbin/init
123 1 └─ /usr/sbin/nginx
456 123 └─ /usr/sbin/nginx
567 1 └─ /usr/bin/python3 my_script.py
ps -eo pid,ppid,user,cmd --forest
自定义输出列,并以树状结构显示。
常用选项总结表
| 选项 (Unix) | 选项 (BSD) | 描述 |
|---|---|---|
-a |
显示所有进程,包括其他用户的进程 | |
-u |
-u |
以用户为中心的格式显示 |
-x |
显示没有控制终端的进程 | |
-e |
显示所有进程 (与 -a 类似) |
|
-f |
-f |
完整格式 (full format) |
-l |
-l |
长格式 (long format) |
-o |
自定义输出列 (e.g., pid,user,cmd) |
|
--forest |
以树状结构显示进程 | |
-H |
显示进程层次结构 (树状) | |
-C |
按命令名筛选 (e.g., -C nginx) |
|
-p |
-p |
按进程 ID (PID) 筛选 (e.g., -p 1234) |
-g |
-g |
按组 ID (GID) 筛选 |
-u |
-u |
按用户名或 UID 筛选 |
--sort |
对输出进行排序 (e.g., --sort=-%cpu) |
实用示例
示例 1:查找特定进程
查找名为 nginx 的所有进程。
# 方法1: grep (最常用) ps aux | grep nginx # 方法2: -C 选项 (更精确) ps -C nginx
示例 2:查找特定用户的进程
查找用户 myuser 运行的所有进程。
ps -u myuser # 或者 ps aux | grep myuser
示例 3:查找特定 PID 的进程
查看 PID 为 1234 的进程详细信息。
ps -f -p 1234
示例 4:自定义输出列
只显示 PID、用户、CPU 占用和命令。
ps -o pid,user,%cpu,cmd
示例 5:按 CPU 或内存占用排序
按 CPU 占用从高到低排序:
ps aux --sort=-%cpu
按内存占用从高到低排序:
ps aux --sort=-%mem
注意: --sort 是 GNU ps 的特性,在 macOS 或其他 BSD 系统上可能不适用。
示例 6:查看进程树
ps -ef --forest # 或者 ps aux --forest
示例 7:查找僵尸进程
僵尸进程的状态是 Z,它们已经执行完毕但父进程尚未回收。
ps aux | grep Z
ps vs. top vs. htop
| 命令 | 描述 | 特点 |
|---|---|---|
ps |
快照 | 显示执行命令那一刻的进程状态,输出简洁,适合脚本和一次性查询。 |
top |
实时监控 | 动态、持续地更新进程列表,默认按 CPU 占用排序,交互式界面(按 q 退出)。 |
htop |
增强型实时监控 | top 的现代化替代品,彩色显示,支持鼠标操作,垂直和水平分割视图,更直观易用。 |
- 当你需要快速查看某个时间点的进程情况时,使用
ps。 - 当你需要持续监控系统资源使用情况和进程活动时,使用
top或htop。 - 在日常交互式使用中,
htop通常是更好的选择,在编写脚本时,ps是标准工具。
