一、高级进程筛选
1. 按资源占用筛选
查找CPU占用率超过10%的进程:
ps aux --sort=-%cpu | awk '$3 > 10 {print $0}'
查找内存占用最大的前5个进程:
ps aux --sort=-%mem | head -n 6 | tail -n 5
2. 按进程状态筛选
查找所有僵尸进程(状态为Z):
ps aux | awk '$8 == "Z" {print $0}'
查找所有睡眠状态(S)的进程:
ps aux | awk '$8 ~ /^S/ {print $0}'
3. 按进程组或会话筛选
显示属于会话ID(SID)为1234的所有进程:
ps -o pid,user,cmd -g 1234
二、进程树与层级关系
1. 以树形结构显示进程
ps -ejH # 显示完整的进程层级结构
ps axjf # 显示进程树(BSD风格)
2. 查看特定进程的子进程
显示PID为1234的所有子进程:
ps --ppid 1234 -o pid,cmd
3. 高亮显示当前进程链
ps -o pid,ppid,cmd --forest | grep --color=auto "$$\|$PPID"
三、实时监控与动态更新
1. 使用watch命令动态刷新ps输出
每2秒刷新一次内存占用最高的进程:
watch -n 2 'ps aux --sort=-%mem | head -n 10'
2. 结合while循环持续监控特定进程
监控PID为1234的进程状态变化:
while true; do ps -p 1234 -o pid,user,%cpu,%mem,stat,cmd; sleep 1; done
四、进程资源消耗分析
1. 显示进程打开的文件数
ps -eo pid,user,comm,nlwp | sort -k4 -nr | head # nlwp列表示线程数
2. 查看进程的内存映射
ps -p 1234 -o pid,vsz,rss,args # 显示虚拟内存、物理内存使用
五、高级格式化输出
1. 自定义输出字段
显示PID、用户、CPU、内存、启动时间和命令:
ps -eo pid,user,%cpu,%mem,lstart,cmd
2. 格式化输出(对齐、颜色)
ps -eo pid,user,%cpu,%mem,args --sort=-%cpu | column -t | head -n 10
六、进程信号与控制
1. 向进程发送信号
向PID为1234的进程发送SIGUSR1信号:
ps -p 1234 -o pid= | xargs kill -USR1
2. 批量终止进程
终止所有用户testuser的进程:
ps -u testuser -o pid= | xargs kill -9
七、与其他工具组合使用
1. 统计每个用户的进程数
ps -eo user | sort | uniq -c | sort -nr
2. 查找占用特定端口的进程
lsof -i :8080 | awk 'NR>1 {print $2}' | xargs ps -p
八、性能优化技巧
1. 快速查找进程
pgrep -lf "apache2" # 等价于 ps aux | grep apache2
2. 进程资源使用汇总
ps -eo user,%cpu,%mem --no-headers | awk '{u[$1]+=$2; m[$1]+=$3} END {for(i in u) print i, u[i], m[i]}' | sort -k2 -nr
九、特殊场景应用
1. 追踪进程的父进程链
pstree -p 1234 # 显示PID 1234的完整父进程链
2. 监控进程启动时间
ps -p 1234 -o lstart=
十、常见问题排查
1. 查找消耗CPU时间最长的进程
ps -eo pid,user,%cpu,etime,cmd --sort=-etime | head
2. 排查僵尸进程
ps aux | grep defunct
总结
ps命令配合其他工具(如awk、grep、xargs)可以实现强大的进程监控和分析功能。熟练掌握这些技巧能帮助你快速定位系统瓶颈、排查问题进程,以及优化资源分配。
如果需要更高级的实时监控,可以考虑使用top、htop、atop或glances等工具。