Linux 系统中的 ps
命令是 process status(进程状态)的缩写,用于实时查看系统中运行的进程信息,它是 Linux 系统管理中最基础且最常用的命令之一,通过不同的参数组合,可以灵活地获取进程的 PID(进程 ID)、CPU 占用率、内存使用量、启动时间、命令行等详细信息,掌握 ps
命令的参数,能够帮助管理员快速定位问题进程、监控系统资源使用情况,并进行有效的进程管理。

ps
命令的基本用法与常用参数
ps
命令的参数分为短格式(单个字母前缀)和长格式(双连字符前缀),-e
和 --everyone
效果相同,默认情况下,ps
命令仅显示当前终端中运行的进程,输出格式较为简单,以下通过分类介绍常用参数及其功能。
进程选择与显示范围参数
a
:显示所有终端下的进程,包括其他用户的进程,但会忽略没有终端的进程(如系统守护进程)。x
:显示没有终端的进程,通常与-a
组合使用,以查看系统中所有进程,包括守护进程。e
:显示所有进程,与-A
或--everyone
等效,是最全面的进程显示选项之一。f
:以完整的格式(forest 树状格式)显示进程,包含进程的父子关系,便于分析进程启动链。u
:以用户为中心显示进程,包含用户名、CPU 占用率、内存占用率等信息,适合按用户筛选进程。grep
:常与管道符结合使用,ps aux | grep nginx
,用于筛选包含特定关键词(如nginx
)的进程。
进程属性显示参数
l
:以长格式显示进程,包含 F(进程标志)、S(进程状态)、UID(用户 ID)、PID(进程 ID)、PPID(父进程 ID)、C(CPU 占用率)、STIME(启动时间)、TTY(终端)、TIME(CPU 累计时间)、CMD(命令)等字段。j
:以作业控制格式显示进程,包含 PGID(进程组 ID)、SID(会话 ID)等信息,适合分析会话和进程组关系。o
:自定义输出字段,ps -eo pid,ppid,user,%cpu,%mem,cmd
可指定显示进程 ID、父进程 ID、用户、CPU 占用率、内存占用率和命令。--sort
:对输出结果排序,ps aux --sort=-%cpu
按 CPU 占用率降序排列,ps aux --sort=+rss
按内存占用量升序排列。
进程状态与时间参数
s
:以信号格式显示进程状态,R
(运行)、S
(睡眠)、D
(不可中断睡眠)、Z
(僵尸进程)等。p
:指定显示特定 PID 的进程,ps -p 1
查看 PID 为 1 的进程(通常是 systemd 或 init)。C
:通过进程名筛选,ps -C nginx
显示所有名为nginx
的进程,比grep
更高效。--forest
:以树状结构显示进程层级,直观展示父子进程关系,ps aux --forest
。
ps
命令常用组合示例
实际使用中,ps
命令常通过参数组合实现复杂需求,以下是几种典型场景的用法:
-
查看所有进程的详细信息
ps -ef
或ps aux
是最常用的组合,前者以标准格式显示所有进程,后者包含更详细的资源占用信息(如%CPU
、%MEM
)。aux
分别对应-a
(显示所有终端进程)、-u
(以用户格式显示)、-x
(显示无终端进程)。 -
按 CPU 或内存占用率排序
ps aux --sort=-%cpu
查看 CPU 占用率最高的进程,ps aux --sort=-%mem
查看内存占用率最高的进程,结合head -n 10
可快速定位资源消耗 TOP10 的进程。(图片来源网络,侵删) -
查看特定用户的进程
ps -u username
显示指定用户的所有进程,ps -u root
查看 root 用户的进程。 -
查看进程的启动时间和运行时长
通过ps -eo pid,etime,cmd
可查看进程 ID、运行时长(elapsed time)和命令,etime
格式为DD-HH:MM:SS
。
ps
命令输出字段说明
ps aux
的输出字段及其含义如下表所示:
字段 | 含义说明 |
---|---|
USER | 进程所有者用户名 |
PID | 进程 ID(唯一标识) |
%CPU | 进程 CPU 占用率百分比 |
%MEM | 进程物理内存占用率百分比 |
VSZ | 虚拟内存大小(KB),包括进程使用的所有虚拟内存空间 |
RSS | 常驻内存集大小(KB),进程实际占用的物理内存 |
TTY | 终端设备, 表示无终端(守护进程) |
STAT | 进程状态(如 R=运行,S=睡眠,D=不可中断睡眠,Z=僵尸进程) |
START | 进程启动时间 |
TIME | 进程累计 CPU 时间 |
COMMAND | 启动进程的命令或程序名 |
相关问答FAQs
问题1:ps aux
和 ps -ef
的输出结果有什么区别?如何选择?
解答:ps aux
和 ps -ef
均用于显示所有进程,但输出格式和字段略有不同。ps aux
来自 BSD 系统,包含 %CPU
、%MEM
等资源占用字段,适合监控系统性能;ps -ef
来自 UNIX 系统,包含 PPID
(父进程 ID)、C
(CPU 调度优先级)等字段,适合分析进程父子关系,选择时,若需关注资源占用,用 ps aux
;若需分析进程层级,用 ps -ef
。

问题2:如何通过 ps
命令查找僵尸进程,并如何处理?
解答:僵尸进程的状态为 Z
,可通过 ps aux | grep Z
或 ps -elf | awk '$3 == "Z"'
查找,僵尸进程已结束但父进程未读取其退出状态,通常需由父进程回收,若父进程无法正常回收,可强制终止父进程(kill -9 PPID
),但需谨慎操作,避免影响系统服务。