pgrep 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于进程与系统命令族(见进程与系统命令族)。不想
ps aux | grep还要过滤 grep 自身?用它更干净。
pgrep 按进程名(或用户、终端等)查找匹配的进程,只输出 PID 列表。它是 ps | grep 的清爽替代,也是 pkill(见pkill)的"只找不杀"版。
一、基本用法
bash
pgrep nginx # 输出所有 nginx 进程的 PID(每行一个)
pgrep -a python # -a:同时打印 PID 和命令行
pgrep -c nginx # -c:只输出匹配数量(几个进程)比
ps aux | grep nginx | grep -v grep干净太多:pgrep 不会把自己(grep 进程)混入结果。脚本里取 PID 列表首选。
二、按用户 / 终端
bash
pgrep -u bob # bob 的所有进程 PID
pgrep -u bob,root -a # 多用户
pgrep -t pts/0 # 某终端上的进程
-u按用户过滤(排查"某人的进程都在哪"),-t按终端。配合-a看命令行,定位具体进程。
三、匹配命令行:-f
bash
pgrep -f "python worker.py" # -f 匹配完整命令行
pgrep -f "train.*resnet" # 支持正则同 pkill:默认只比进程名(如
python),要比参数/启动命令必须-f。注意-f用正则,范围别写太宽。
四、与 ps / pkill 的关系
bash
ps aux | grep nginx # 老式查找(要手动去 grep 自身)
pgrep -a nginx # 干净版,且可编程取 PID
pkill nginx # pgrep 的"找+杀"版(见 [pkill](/linux/cmd/pkill.md))
pgrep是ps|grep的现代化替代(不混入自身、输出纯 PID 好接管道);pkill 是它加 kill。想"只查"用 pgrep,想"查了就杀"用 pkill。
五、实战:判断进程存活 / 批量操作
bash
if pgrep -x nginx >/dev/null; then echo "nginx 在跑"; fi
pgrep python | xargs kill # 取到 PID 列表再 kill(见 [xargs](/linux/cmd/xargs.md))脚本里
pgrep的退出码能判断"进程在不在"(-x精确全名匹配更严谨)。取 PID 列表喂给xargs kill做批量处理也很顺。
一句话总结
pgrep = 按名查进程 PID(ps|grep 的清爽替代,不混入自身):-a 带命令行、-c 计数、-u 按用户、-f 匹配完整命令行(正则);与 pkill(见pkill)是"只找"vs"找+杀";脚本里 if pgrep -x name 判存活、或取 PID 列表喂 xargs kill。比 ps aux|grep 干净可编程。