概述
- 以下是Linux
ps
(Process Status)命令的详细教程,包含语法、选项、输出解析及实战技巧 - 资料已经分类整理好:
https://pan.quark.cn/s/26d73f7dd8a7
1. 基本概念与语法
ps
用于显示当前系统的进程状态,可静态查看某一时刻的进程信息。
核心语法:
ps [选项]
三类选项风格:
- UNIX风格:以
-
开头(如-ef
)。 - BSD风格:无
-
开头(如aux
)。 - GNU长选项:以
--
开头(如--forest
)。
2. 常用选项组合
2.1 查看完整进程树
ps -ejH # 以层级结构显示所有进程
ps axjf # 显示进程树(BSD风格)
2.2 查看所有用户的进程
ps -ef # 显示所有进程的详细信息
ps aux # 显示所有进程的资源占用情况
2.3 实时监控特定进程
ps -p 1234 -o %cpu,%mem,cmd # 监控PID为1234的进程资源占用
watch -n 1 "ps -p 1234 -o %cpu,%mem,cmd" # 每秒刷新一次
2.4 按CPU或内存排序
ps aux --sort=-%cpu # 按CPU使用率降序排列
ps aux --sort=-%mem # 按内存使用率降序排列
3. 输出字段解析
3.1 ps -ef
输出字段
字段 | 含义 |
---|---|
UID | 进程所有者的用户ID |
PID | 进程ID |
PPID | 父进程ID |
C | CPU使用率(相对百分比) |
STIME | 进程启动时间 |
TTY | 控制终端(? 表示无终端) |
TIME | 进程使用的CPU总时间 |
CMD | 启动进程的命令行 |
3.2 ps aux
输出字段
字段 | 含义 |
---|---|
USER | 进程所有者 |
PID | 进程ID |
%CPU | CPU使用率 |
%MEM | 内存使用率 |
VSZ | 虚拟内存大小(KB) |
RSS | 物理内存占用(KB) |
TTY | 控制终端 |
STAT | 进程状态(见下表) |
START | 进程启动时间 |
TIME | 进程使用的CPU时间 |
COMMAND | 启动进程的命令行 |
3.3 进程状态(STAT字段)
状态码 | 含义 |
---|---|
R | 运行中(Running或Runnable) |
S | 睡眠中(可中断) |
D | 不可中断的睡眠(通常是IO等待) |
T | 暂停(被信号暂停) |
Z | 僵尸进程(已终止但未被清理) |
s | 会话领导者 |
l | 多线程进程 |
+ | 前台进程组 |
4. 高级筛选与格式化
4.1 按条件筛选进程
ps -ef | grep nginx # 查找包含"nginx"的进程
ps -C nginx # 查找名为"nginx"的进程
ps -U root # 查找root用户的进程
ps --ppid 1234 # 查找父进程ID为1234的所有子进程
ps -p 1,2,3 # 查找指定PID的进程
ps -ef --forest # 以树状结构显示进程关系
4.2 自定义输出格式
ps -eo pid,user,%cpu,%mem,args # 自定义显示字段
ps -eo pid,user,%cpu,%mem,args --sort=-%cpu # 按CPU排序
ps -o pid,comm,%cpu -p $(pgrep nginx) # 仅显示nginx进程的特定字段
4.3 监控进程资源占用趋势
# 每2秒刷新一次,显示top 5 CPU占用进程
watch -n 2 "ps aux --sort=-%cpu | head -n 6"
# 每5秒记录一次系统CPU占用最高的10个进程
while true; do ps aux --sort=-%cpu | head -n 11 >> /var/log/top_processes.log; sleep 5; done
5. 与其他命令组合实战
5.1 统计用户进程数量
ps -ef | awk '{print $1}' | sort | uniq -c | sort -nr
5.2 查找占用内存最大的进程并杀死
# 显示内存占用top 3的进程
ps aux --sort=-%mem | head -n 4
# 安全杀死内存占用最高的进程(先发送SIGTERM,再发送SIGKILL)
pid=$(ps aux --sort=-%mem | awk 'NR==2 {print $2}')
kill $pid; sleep 2; kill -9 $pid
5.3 监控特定服务的资源占用
# 监控MySQL服务的CPU和内存变化
while true; do ps -p $(pgrep mysql) -o %cpu,%mem; sleep 1; done
5.4 查找僵尸进程
ps aux | grep 'Z' # 查找状态为Z的进程
6. 注意事项
- ps vs top:
ps
:静态查看某一时刻的进程信息。top
:动态实时监控进程资源占用。
- 僵尸进程处理:
- 僵尸进程(
STAT=Z
)是已终止但未被父进程回收的进程,过多会占用PID资源。 - 通常需杀死其父进程(使用
kill -9 PPID
)。
- 僵尸进程(
- 进程状态异常:
D
状态(不可中断睡眠)过久可能表示系统IO问题。- 大量僵尸进程可能表示程序有bug。
- 性能影响:
- 频繁执行
ps
对系统性能影响极小,但大规模筛选(如ps -ef | grep
)可能消耗CPU。
- 频繁执行
7. 总结
ps
是Linux系统中最基础的进程监控工具,核心用法包括:
- 查看进程状态:
ps -ef
、ps aux
- 进程树展示:
ps -ejH
、ps axjf
- 自定义筛选:结合
-C
、-U
、--ppid
等选项 - 格式化输出:使用
-o
选项自定义字段
配合其他命令(如 grep
、awk
、sort
),ps
可实现强大的进程分析功能,是系统运维和故障排查的必备工具。