ps 提供原生多维过滤能力,支持按命令名(-C)、用户(-u/-U)、PID(-p/-q)、父进程(--ppid)等精准筛选,配合 -o 自定义输出可高效定位目标进程。

精准过滤目标进程不是靠“多敲几个 grep”,而是靠 ps 本身提供的原生筛选能力——它支持按用户、PID、父进程、会话、终端、命令名、状态等维度直接过滤,既快又准,还能避免 grep 自身进程干扰。
用 -C 按精确命令名匹配
适用于已知完整可执行文件名(不含路径)的场景,比如 nginx、sshd、java。它不依赖参数或路径,只比对 进程的 argv[0]:
-
ps -C nginx—— 只显示真正以nginx启动的主进程(不含nginx: worker process) -
ps -C java -o pid,cmd --no-headers—— 输出所有 java 进程 PID 和完整命令行,方便后续处理 - 注意:
ps -C python不会匹配/usr/bin/python3 script.py,因为实际 argv[0] 是python3或script.py,不是python
用 -u 或 -U 按用户身份筛选
区分真实用户(-U)和有效用户(-u),日常排查服务进程最常用:
-
ps -u www-data—— 查看以 www-data 身份运行的所有进程(Nginx/Apache 常用) -
ps -U root -o pid,ppid,stat,cmd—— 显示 root 启动的全部进程,含状态和父子关系 - 多个用户用逗号分隔:
ps -u user1,user2
用 -p、-q、--ppid 直接按进程 ID 定位
适合已知 PID 或需向上/向下追溯时使用,无歧义、零延迟:
-
ps -p 1234—— 单 PID 查询(输出一行或空) -
ps -q 1234 5678 9012—— 批量查多个 PID(比 -p 更高效) -
ps --ppid 1234—— 查找指定 PID 的所有子进程(如查某个服务拉起的 worker) - 组合使用:
ps -o pid,cmd --ppid $(pgrep -f "myapp.jar")—— 先找主进程,再查它的子进程
用 -f 配合自定义格式(-o)锁定关键字段
避免被冗长输出干扰,只提取你真正需要的信息,同时保留原始语义:
-
ps -f -o pid,ppid,uid,gid,etime,args | grep "redis-server"—— 显示启动时间(etime)、权限信息和完整参数 -
ps -eo pid,comm,%cpu,%mem,etimes --sort=-%cpu | head -5—— 查 CPU 占用最高的 5 个进程,comm是纯命令名,etimes是进程存活秒数 - 注意:
args显示完整命令行(含参数),comm只显示可执行文件名,cmd行为因风格而异,推荐优先用args或comm


















