在Linux系统管理中,监控和管理进程是最常见的任务之一。ps和top命令是每个运维和开发人员都必须掌握的核心工具。本文将深入讲解这两个命令的用法、常用参数及输出解读,帮助你轻松驾驭进程管理。
📌 目录
ps命令详解
top命令详解
ps与top对比总结
实战技巧
🔍 ps命令详解
ps(process status)用于显示当前终端或系统中进程的快照信息。它只输出某一时刻的进程状态,适合编写脚本或进行一次性查询。
基本语法
bash
ps [选项]
常用选项分类
| 类型 | 选项 | 说明 |
|---|---|---|
| 简单 | ps | 显示当前终端进程(无参数) |
| Unix风格 | -e、-f、-l | 需带连字符,显示系统所有进程或详细格式 |
| BSD风格 | a、x、u、aux | 不带连字符,更人性化 |
| GNU风格 | --sort、--ppid | 双连字符,支持长选项 |
最常用命令示例
1️⃣ps aux– 显示所有进程的详细状态(BSD风格)
bash
ps aux
输出示例:
text
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 168812 11508 ? Ss 10:30 0:02 /sbin/init www-data 980 0.5 2.3 456712 182000 ? S 10:32 0:12 php-fpm
USER:进程所有者
%CPU:CPU使用率
%MEM:内存使用率
VSZ:虚拟内存大小(KiB)
RSS:常驻物理内存大小(KiB)
STAT:进程状态(R运行、S睡眠、Z僵尸等)
TIME:累计CPU时间
COMMAND:命令行
2️⃣ps -ef– 标准Unix格式输出所有进程
bash
ps -ef
输出列:UID、PID、PPID、C(CPU使用率)、STIME、TTY、TIME、CMD
适合结合grep查找特定进程,如:
bash
ps -ef | grep nginx
3️⃣ps -eo– 自定义输出格式
bash
ps -eo pid,user,comm,%cpu,%mem --sort=-%cpu | head -10
输出前10个CPU占用最高的进程。--sort=-%cpu表示按CPU降序排列。
4️⃣ 显示进程树结构
bash
ps -ejH # 显示PID和PGID,树状结构 ps -f --forest # 树形显示父子关系
进程状态码(STAT)速查表
| 状态 | 含义 |
|---|---|
| R | 正在运行或可运行 |
| S | 可中断睡眠(等待事件) |
| D | 不可中断睡眠(通常为IO) |
| Z | 僵尸进程 |
| T | 停止或追踪 |
< | 高优先级 |
N | 低优先级 |
s | 会话领导者 |
+ | 前台进程组 |
🔝 top命令详解
top是动态实时的进程监视器,默认每3秒刷新一次,交互式操作强,适合实时观察系统负载。
启动方式
bash
top
执行后进入全屏交互界面,分为上下两部分:统计信息区(前5行)和进程列表区。
统计信息区详解
text
top - 14:23:15 up 10 days, 2:34, 3 users, load average: 0.08, 0.03, 0.01 Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.3 us, 0.8 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 7825 total, 1234 free, 3456 used, 3135 buff/cache MiB Swap: 2048 total, 2048 free, 0 used. 4012 avail Mem
第1行:当前时间、系统运行时间、登录用户数、平均负载(1/5/15分钟)
第2行:进程总数、运行/睡眠/停止/僵尸数
第3行:CPU时间分布
us:用户态占用sy:内核态占用ni:nice调整过的进程id:空闲wa:等待IOhi/si:硬件/软件中断
第4/5行:物理内存和交换分区使用情况
常用交互命令(在top运行中键入)
| 按键 | 作用 |
|---|---|
1 | 展开或折叠每个CPU核心的使用率 |
P | 按CPU使用率降序排序(大写P) |
M | 按内存使用率降序排序(大写M) |
N | 按PID排序 |
T | 按累计CPU时间排序 |
R | 反向排序 |
k | 杀死进程(输入PID和信号) |
r | 重新设置进程优先级(renice) |
u | 只显示指定用户的进程 |
H | 显示线程而非进程(需按H切换) |
q | 退出 |
d | 改变刷新间隔(秒) |
f | 选择显示哪些列(字段管理) |
o | 自定义排序字段 |
保存配置与增强版htop
top的配置文件通常为~/.toprc,可通过W键保存当前设置。
若觉得top不够直观,推荐安装htop:
bash
sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL
htop支持鼠标点击、颜色更丰富、操作更友好。
⚖️ ps vs top 对比总结
| 特性 | ps | top |
|---|---|---|
| 输出方式 | 一次性快照 | 动态实时刷新 |
| 交互性 | 无,需配合grep/awk处理 | 强大,可在线排序/杀进程 |
| 资源开销 | 极低 | 略高(持续刷新) |
| 适用场景 | 脚本、历史数据分析、简单查询 | 实时监控、故障排查、压力观察 |
| 典型命令 | ps aux、ps -ef | top、htop |
🛠️ 实战技巧
1. 查找最消耗CPU的进程
bash
ps aux --sort=-%cpu | head -5 top -o %CPU # 进入top后按P键(效果相同)
2. 查看特定进程(例如MySQL)的所有线程
bash
ps -T -p $(pidof mysqld)
3. 不进入交互模式指定top刷新次数后退出
bash
top -b -n 1 > /tmp/top_snapshot.txt # 批处理模式,只输出一次
4. 用top实时监控指定用户
bash
top -u username
5. 显示进程的完整命令行(含参数)
bash
ps -ef | grep java # 只显示部分参数 ps -efww | grep java # -ww 代表无限宽度
6. 查看进程打开的端口(配合lsof)
bash
ps aux | grep nginx | awk '{print $2}' | xargs lsof -p | grep LISTEN📝 结语
ps和top是Linux进程管理中最基础也最强大的工具。记住:
想看历史快照,用
ps想实时监控,用
top
掌握它们,再加上一点grep、awk和sort的配合,你就能像专家一样轻松剖析系统的运行状态。
希望这篇文章能帮助你写出更高效的脚本,排查更复杂的线上问题。如果你有更多实战经验或疑问,欢迎在评论区留言交流!