pgrep 是 Linux 中专用于按进程名查找 PID 的轻量高效工具,比 ps | grep 更简洁可靠,避免 grep 自身进程干扰;支持 -f 匹配完整命令行、-u 按用户筛选、-l 显示进程名、-n/-o 获取最新/最旧进程等核心功能,常与 kill 或脚本配合实现自动化进程管理。

pgrep 是 Linux 中一个轻量、高效的进程查找工具,专为快速匹配进程名并输出其 PID(进程标识符)而设计。它比 ps | grep 更简洁、更可靠,避免了 grep 自身进程被误匹配的问题。
基础用法:按进程名精确匹配
最常用的方式是直接跟进程名,pgrep 会返回所有匹配进程的 PID,每行一个:
-
pgrep nginx—— 查找所有名为 nginx 的进程 PID -
pgrep python3—— 查找所有 python3 进程(注意:不匹配 python 或 python3.9 等带版本号的完整命令名,除非使用正则或模糊选项)
增强匹配:支持部分名称与正则
默认只匹配可执行文件 basename(如 /usr/bin/python3 匹配为 python3),如需匹配命令行完整参数,用 -f 选项:
-
pgrep -f "flask run"—— 查找命令行中含flask run的进程 -
pgrep -f "python.*myapp"—— 结合正则,匹配类似python3 myapp.py的进程(需 shell 支持基本正则)
精准控制:限定用户、状态与输出格式
可组合多个选项缩小范围,提升准确性:
-
pgrep -u www-data nginx—— 只找用户 www-data 运行的 nginx 进程 -
pgrep -t pts/1 bash—— 查找在终端 pts/1 上运行的 bash 进程 -
pgrep -l sshd—— 输出 PID + 进程名(如1234 sshd) -
pgrep -n httpd—— 只返回最新启动的那个 httpd 进程 PID -
pgrep -o mysql—— 只返回最早启动的那个 mysql 进程 PID
实用技巧:配合 kill 或脚本自动化
pgrep 常与 kill 连用,实现一键终止目标进程:
-
kill $(pgrep node)—— 杀掉所有 node 进程(谨慎使用) -
kill -9 $(pgrep -f "java.*backend")—— 强制终止特定 Java 后端服务 - 在脚本中判断进程是否存在:
if pgrep redis-server > /dev/null; then echo "running"; fi
不复杂但容易忽略:pgrep 默认只搜索当前用户的进程;如需查系统级进程(如 root 启动的服务),通常需加 sudo,例如 sudo pgrep -u root dockerd。


















