ps 命令快速使用指南:掌握 Linux 进程查看
本文旨在为提供一份清晰、实用的 ps (Process Status) 命令指南。
核心概念:理解两种选项风格
ps 命令历史悠久,因此它同时支持两种风格的命令行选项,这是其语法有时令人困惑的主要原因:
- Unix (System V) 风格:选项前加一个连字符
-(例如-e,-f)。 - BSD 风格:选项前不加连字符
-(例如a,u,x)。
本指南将聚焦于最常用、更直观的 BSD 风格。 最常见的命令 ps aux 就是 BSD 风格。
黄金组合:ps aux (最重要,必须掌握)
这是查看系统上所有进程最常用的命令,是绝大多数故障排查的起点。
ps aux
选项分解(为什么是 aux?)
a:列出与终端相关的所有用户的进程。u:采用用户导向(user-oriented) 的详细格式输出,显示如用户、CPU%、内存%等关键信息。x:列出与终端无关的进程(如系统守护进程、后台服务)。
组合效果:a + x 确保了列出几乎所有进程(包括其他用户的和系统的),而 u 则提供了详尽的资源占用信息。
输出信息解读
运行 ps aux 后,会看到类似下面的列,理解它们至关重要:
| 列名 | 含义 | 说明 |
|---|---|---|
USER |
进程的所有者(哪个用户启动的)。 | |
PID |
进程 ID。系统的唯一标识,用于管理(如杀死)该进程。 | |
%CPU |
进程占用的 CPU 使用百分比。 | |
%MEM |
进程占用的物理内存使用百分比。 | |
VSZ |
进程使用的虚拟内存大小(单位 KB)。 | |
RSS |
进程使用的常驻物理内存大小(单位 KB)。 | |
TTY |
进程关联的终端。? 表示该进程与终端无关,通常是系统守护进程。 |
|
STAT |
进程状态码(见下方详解)。 | |
START |
进程的启动时间。 | |
TIME |
进程累计使用的 CPU 时间。 | |
COMMAND |
启动该进程的命令行(命令和参数)。 |
STAT 状态码详解
| 状态码 | 含义 |
|---|---|
R |
运行中 (Running) 或可运行(在运行队列中等待)。 |
S |
中断睡眠 (Sleeping),可被唤醒(通常在等待某个事件完成,如 I/O 操作)。 |
D |
不可中断睡眠(通常是进程正在等待磁盘 I/O,不能被杀死)。 |
T |
停止 (Stopped),通常是由作业控制信号(如 Ctrl+Z)或调试器暂停。 |
Z |
僵尸 (Zombie),进程已终止,但其退出状态尚未被父进程读取。 |
< |
高优先级。 |
N |
低优先级。 |
s |
会话首进程 (session leader)。 |
l |
多线程进程。 |
+ |
位于前台进程组。 |
实用命令组合
掌握了 ps aux,就可以组合出各种实用场景的命令。
1. 查找特定进程
这是最最常用的组合,使用 grep 过滤 ps aux 的输出。
# 查找所有与 nginx 相关的进程
ps aux | grep nginx
# 查找所有与 java 相关的进程,并忽略大小写
ps aux | grep -i java
# 一个技巧:这样写可以避免 grep 命令自身出现在结果中
ps aux | grep [n]ginx
2. 以树形显示进程层级
清晰展示进程的父子关系,便于理解进程是如何被创建的。
ps auxf # BSD 风格
# 或者
ps -ef --forest # Unix 风格,效果类似
3. 查看当前用户自己的所有进程
如果只想查看自己运行的程序,而不看系统和其他用户的。
ps ux
4. 按资源占用排序(诊断问题)
快速找出消耗 CPU 或内存最多的进程。
# 按 CPU 使用率降序排序,并查看前 10 个进程
ps aux --sort=-%cpu | head -n 10
# 按内存使用率降序排序,并查看前 10 个进程
ps aux --sort=-%mem | head -n 10
(- 号表示降序,去掉 - 则为升序)
5. 查看指定进程的详细信息
当已经知道目标的进程 ID (PID) 时。
ps -p <PID> -f # 使用 Unix 风格显示完整信息
ps -p 1234 u # 结合 BSD 风格显示详细信息
# 例如: ps -p 5678 u
常用命令速查表
| 命令 | 作用描述 | 适用场景 |
|---|---|---|
ps aux |
查看所有进程的详细信息 | 系统进程总览,排查问题的第一步 |
ps aux \| grep <关键词> |
查找特定进程 | 定位程序/服务,查看其 PID 和资源占用 |
ps ux |
查看当前用户的所有进程 | 检查自己运行的程序和脚本 |
ps auxf / ps -ef --forest |
树形显示进程父子关系 | 理解进程的启动层次和依赖关系 |
ps aux --sort=-%cpu \| head -10 |
按 CPU 使用率排序 | 诊断系统 CPU 负载过高的问题 |
ps aux --sort=-%mem \| head -10 |
按内存使用率排序 | 诊断系统内存不足的问题 |
ps -p <PID> -o pid,user,%cpu,%mem,command |
查看指定 PID 进程的特定信息 | 自定义输出字段,精确定位信息 |
留下评论