pgrep 比 ps | grep 更精准安全,直接输出 PID,支持按进程名(-x)、全命令行(-f)、用户(-u)等条件匹配,并可管道直连 xargs 或命令替换执行 kill 等操作。

直接用 pgrep 查 PID,再配合 xargs 或命令替换批量操作,比 ps | grep 更精准、更安全。
按进程名精确匹配 PID
pgrep 默认只输出匹配进程的 PID,不带多余信息,避免误杀。例如:
-
pgrep nginx—— 列出所有 nginx 主进程和工作进程的 PID -
pgrep -f "python.*server.py"—— 按完整命令行匹配(-f启用全命令行搜索) -
pgrep -u www-data apache2—— 限定用户 + 进程名,避免权限冲突 -
pgrep -x firefox——-x要求完全匹配进程名(排除 firefox-bin、firefox-esr 等变体)
查到 PID 后立刻执行操作(如 kill、killall 替代方案)
不用先存 PID 再手动处理,用管道直连后续命令:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
pgrep nginx | xargs kill—— 安全终止所有 nginx 进程 -
pgrep -f "myapp" | xargs -r kill -9——-r防止无匹配时报错;-9强制终止 -
kill $(pgrep -x code)—— 命令替换方式,适合简单场景(注意空格/特殊字符风险略高)
结合其他工具做条件筛选或批量管理
pgrep 可与 pidof、systemctl 或 shell 循环互补:
- 查多个进程并统一处理:
pgrep -f "worker\|consumer" | xargs kill -USR2(发送自定义信号) - 排除自身脚本干扰:
pgrep -f "backup.sh" | grep -v $$ | xargs kill($$是当前 shell PID) - 配合
ps查详情再决策:ps -p $(pgrep -x node) -o pid,user,%cpu,cmd
注意事项:避免常见坑
pgrep 默认匹配的是进程名(comm 字段),不是完整命令行,这点和 ps aux | grep 行为不同:
- 启动命令是
/usr/bin/python3 /opt/app/main.py,进程名通常是python3,所以pgrep main.py不会命中 —— 改用pgrep -f main.py - 容器内进程可能被
sleep、sh包裹,需结合-f和正则判断 - 普通用户只能查自己启动的进程,
sudo pgrep才能看到全部(注意权限和安全边界)










