pgrep 命令 #
pgrep
命令用于根据名称和其他属性查找进程,并显示匹配进程的进程 ID(PID)。它是一个方便的工具,可以快速找到特定进程的 PID,而不需要使用ps
命令和grep
的组合。
语法 #
pgrep [选项] 模式
常用选项 #
选项 | 描述 |
---|---|
-c, --count |
只显示匹配的进程数量 |
-d, --delimiter 分隔符 |
指定输出分隔符(默认为换行符) |
-f, --full |
匹配完整的命令行,而不仅仅是进程名 |
-g, --pgroup 进程组ID列表 |
只匹配列出的进程组中的进程 |
-G, --group 组列表 |
只匹配列出的实际组 ID 中的进程 |
-i, --ignore-case |
忽略大小写 |
-l, --list-name |
列出进程名和进程 ID |
-a, --list-full |
列出完整的命令行和进程 ID |
-n, --newest |
只选择最新的进程 |
-o, --oldest |
只选择最老的进程 |
-P, --parent 父进程ID列表 |
只匹配列出的父进程的子进程 |
-s, --session 会话ID列表 |
只匹配列出的会话中的进程 |
-t, --terminal 终端列表 |
只匹配列出的终端上运行的进程 |
-u, --euid 用户列表 |
只匹配列出的有效用户 ID 的进程 |
-U, --uid 用户列表 |
只匹配列出的实际用户 ID 的进程 |
-v, --inverse |
反向匹配,选择不匹配的进程 |
-w, --lightweight |
列出所有 TID(线程 ID) |
-x, --exact |
只匹配与模式完全匹配的进程名 |
-F, --pidfile 文件 |
从文件中读取 PID |
-L, --logpidfile |
如果 PID 文件未锁定,则失败 |
-r, --runstates 状态 |
匹配指定运行状态的进程 |
--ns PID |
匹配与 PID 相同命名空间的进程 |
--nslist 命名空间列表 |
列出要匹配的命名空间 |
-h, --help |
显示帮助信息 |
-V, --version |
显示版本信息 |
常见用法 #
1. 查找进程 ID #
pgrep firefox
这会显示所有名为"firefox"的进程的 PID。
2. 计算匹配的进程数量 #
pgrep -c firefox
3. 显示进程名和进程 ID #
pgrep -l firefox
输出示例:
1234 firefox
5678 firefox-bin
4. 显示完整的命令行和进程 ID #
pgrep -a firefox
输出示例:
1234 /usr/lib/firefox/firefox
5678 /usr/lib/firefox/firefox-bin
5. 匹配完整的命令行 #
pgrep -f "python script.py"
这会匹配命令行中包含"python script.py"的进程。
6. 忽略大小写 #
pgrep -i firefox
这会匹配"firefox"、“Firefox”、“FIREFOX"等。
7. 只显示最新的进程 #
pgrep -n firefox
8. 只显示最老的进程 #
pgrep -o firefox
9. 查找特定用户的进程 #
pgrep -u username firefox
10. 查找特定终端上的进程 #
pgrep -t pts/0
11. 反向匹配 #
pgrep -v firefox
这会显示所有名称不是"firefox"的进程的 PID。
12. 精确匹配 #
pgrep -x firefox
这只会匹配名称恰好是"firefox"的进程,而不是包含"firefox"的进程。
13. 使用自定义分隔符 #
pgrep -d, firefox
输出示例:
1234,5678
14. 查找特定父进程的子进程 #
pgrep -P 1234
这会显示父进程 ID 为 1234 的所有子进程的 PID。
与其他命令结合使用 #
1. 终止所有匹配的进程 #
pgrep firefox | xargs kill
2. 查看所有匹配进程的详细信息 #
pgrep firefox | xargs ps -f
3. 监控特定进程的资源使用情况 #
pgrep -f "python script.py" | xargs watch -n 1 ps -o pid,ppid,cmd,%cpu,%mem -p
4. 查找并重新启动进程 #
if ! pgrep -x "service_name" > /dev/null; then
service service_name start
fi
5. 查找并限制进程的 CPU 使用率 #
pgrep -f "process_name" | xargs -I{} renice +10 {}
6. 查找并移动进程到特定 CPU 核心 #
pgrep -f "process_name" | xargs -I{} taskset -pc 0-1 {}
实用示例 #
1. 检查服务是否运行 #
if pgrep -x "nginx" > /dev/null; then
echo "Nginx is running"
else
echo "Nginx is not running"
fi
2. 查找占用内存最多的 Java 进程 #
pgrep java | xargs ps -o pid,cmd,%mem --sort=-%mem | head -n 2
3. 查找特定用户的所有 Python 进程 #
pgrep -u username -a python
4. 查找运行时间最长的进程 #
pgrep -o -a bash
5. 查找最近启动的进程 #
pgrep -n -a bash
6. 查找特定进程组的所有进程 #
pgrep -g 1234
7. 查找所有 Web 服务器进程 #
pgrep -f "apache|nginx|httpd"
8. 查找所有数据库进程 #
pgrep -f "mysql|postgres|oracle|mongodb"
与 pkill 的关系 #
pgrep
和pkill
是一对相关命令:
pgrep
查找进程并显示其 PIDpkill
查找进程并向其发送信号(默认为 SIGTERM)
它们接受相同的选项和参数,但执行不同的操作。
提示 #
- 使用
-f
选项可以匹配完整的命令行,这在区分同名但参数不同的进程时很有用 - 使用
-x
选项可以进行精确匹配,避免匹配到不需要的进程 - 使用
-l
或-a
选项可以显示更多信息,而不仅仅是 PID - 在脚本中,通常使用
pgrep -x "process_name" > /dev/null
来检查进程是否运行 - 使用
-n
和-o
选项可以分别找到最新和最老的进程 - 使用
-c
选项可以计算匹配的进程数量 - 在多用户系统上,使用
-u
选项可以只查找特定用户的进程 - 使用
-P
选项可以查找特定父进程的所有子进程 - 在处理多个匹配项时,可以使用
-d
选项指定自定义分隔符