做Linux运维的小伙伴,日常工作中进程排查、服务监控、性能分析是高频操作。而ps作为linux最核心的进程查看命令,是排查问题的第一利器。
但很多人只会 ps -ef | grep 进程名 这一个用法,遇到进程卡死、内存cpu占用异常、僵尸进程排查、父子进程溯源等场景就束手无策。
今天这篇文章,一次性讲透ps命令的主流用法、参数区别、字段解读和高阶排查技巧,看完可以直接用于实际故障处理!
一、ps命令的两套参数体系
多新手疑惑:为什么有的人用 ps aux,有的人用 ps -ef?
其实ps命令有两套独立参数规范,混用会导致输出异常,企业运维中两套各有适用场景,建议统一使用习惯:
1. BSD风格(无横杠):ps aux
侧重展示资源占用(cpu、内存占比),适合性能排查、找耗资源进程,是运维查负载的首选。
2. UNIX风格(有横杠):ps -ef
侧重展示进程关系(pid、父pid、启动用户),适合溯源进程来源、排查父子进程异常、僵尸进程。
总结起来就是:查资源用 ps aux,查进程关系用 ps -ef,两套参数不要混用!
二、ps实战基础
先掌握最常用的基础指令,看懂输出字段,是进阶排查的前提。
1. 查看系统所有进程
#UNIX风格:查看所有进程,侧重父子关系ps -ef#BSD风格:查看所有进程,侧重资源占用ps aux
2. 关键参数字段解读
ps -ef 核心字段
ps aux 核心字段
%CPU:进程CPU占用百分比
%MEM:进程物理内存占用百分比
RSS:实际占用物理内存大小
STAT:进程状态(重点!下文详解)
START:进程启动时间
3. 进程状态 STAT 详解
通过STAT状态可快速判断进程异常,无需逐行分析日志:
三、ps高频实战场景
ps日常主要用于查进程、杀进程、监控服务、排查异常等场景
场景1:精准查询指定服务进程
最常用的组合命令,排查应用服务是否启动、获取业务的pid:
#通用查询:查询nginx进程ps -ef | grep nginx#精准过滤(排除grep自身进程)ps -ef | grep nginx | grep -v grep#BSD风格查询资源占用ps aux | grep mysql
场景2:按用户/pid筛选进程
服务器多用户部署服务时,快速筛选指定用户进程:
#查看root用户所有进程ps -u root#查看指定PID进程详情ps -p 12345#批量查看多个PID进程ps -p 1234,5678
场景3:查询进程父子关系(溯源启动来源)
排查未知进程、恶意进程、服务自动重启异常必备:
#树形展示进程父子关系,清晰直观ps -efH#可视化进程树(更美观)pstree -p
场景4:排查僵尸进程(解决资源占用异常)
服务器负载莫名升高、内存泄漏,大概率是僵尸进程堆积:
#筛选所有僵尸进程ps aux | grep Z#统计僵尸进程数量ps aux | grep -c Z
处理思路:找到僵尸进程的父进程pid,重启父进程即可回收僵尸进程,无需重启服务器。
场景5:查找服务器CPU/内存占用最高的进程
服务器卡顿、负载高时,一键定位耗资源进程:
#按CPU使用率降序排序ps aux --sort=-%cpu#按内存使用率降序排序ps aux --sort=-%mem#只展示Top10耗内存进程ps aux --sort=-%mem | head -10
场景6:动态监控服务进程状态
服务重启、上线部署时,实时跟踪进程启动/退出状态:
#每秒刷新一次,监控nginx进程状态watch -n 1 "ps -ef | grep nginx | grep -v grep"
场景7:精准自定义输出字段
默认输出信息冗余,可自定义只展示需要的字段,适配脚本监控:
#只输出PID、父PID、CPU占比、内存占比、启动命令ps -eo pid,ppid,%cpu,%mem,cmd
四、ps+kill的实战管理
ps的核心价值不止是查进程,更是配合kill完成进程管控,解决服务卡死、端口占用问题。
1. 常规终止进程
#先查PIDps -ef | grep nginx#正常终止进程(优雅退出,释放资源)kill 12345
2. 强制kill进程
#强制杀死进程(暴力终止,慎用!)kill -9 12345
3. 批量杀死同类进程
#批量杀死所有nginx进程ps -ef | grep nginx | grep -v grep | awk '{print $2}' | xargs kill -9
五、注意事项
误区1:混用两套参数
不要写 ps -aux(多余横杠),会导致参数解析异常,输出结果错乱,严格区分 ps aux 和 ps -ef。
误区2:grep查询不排除自身进程
ps -ef | grep 进程名 会多出一条grep自身进程,排查时易误判,务必加 grep -v grep 过滤。
误区3:滥用 kill -9
kill -9 是强制暴力终止,会导致进程未释放文件句柄、内存资源,引发数据丢失、端口残留问题,优先用普通kill,卡死再用-9。
六、核心参数
需求场景 | 核心命令 |
|---|
查看所有进程(查关系) | ps -ef |
查看所有进程(查资源) | ps aux |
查询指定服务进程 | ps -ef | grep 进程名 | grep -v grep |
查看进程树 | ps -efH / pstree -p |
排查僵尸进程 | ps aux | grep Z |
查找高CPU/内存进程 | ps aux --sort=-%cpu / -%mem |
自定义进程字段输出 | ps -eo 字段1,字段2... |
动态监控进程状态 | watch -n 1 "ps -ef | grep 进程名" |
ps命令看似简单,却是Linux运维进程排查、性能调优、故障定位的基石。不用死记硬背所有参数,只需记住:查关系用ef、查资源用aux、异常看STAT、卡顿排序找TOP进程,就能搞定绝大多数工作场景。
如果你觉得文章对你的运维工作有帮助,记得点赞加关注。
#运维 #linux运维 #linux实战 #ps命令的实战用法