简介
Linux 中的 pgrep 命令是一个功能强大的实用程序,用于根据名称、用户、组和其他标准搜索进程。它允许轻松地找到匹配给定模式的运行进程的进程id (pid)。该命令对于脚本或需要查找特定进程而不需要使用 ps 手动查找的管理员特别有用。
常用选项
- -u
:查找特定用户拥有的进程 - -g
:查找特定组中的进程 - -P
:查找给定父 PID 的子进程 - -f
:与完整命令行进行匹配(不仅仅是进程名称) - -l:显示进程名称及其 PID
- -o:仅返回第一个匹配的进程
- -v:反向搜索(返回与模式不匹配的进程)
- -c
:通过可执行命令(而不是名称)查找进程 - -x:完全匹配(即匹配命令的全名)
- -d
:指定 PID 的分隔符,默认是换行符 - -c:打印出匹配的数量
- -i:匹配时不区分大小写
- -n:仅选择最新的(最近启动的)匹配进程
示例用法
通过名称查找进程
要查找特定进程 (例如 bash) 的进程 ID
pgrep bash
示例输出
1234
5678
查找特定用户的进程
要查找以特定用户(例如 root)运行的进程
pgrep -u root
按名称和用户查找进程
可以组合条件。例如,要查找用户 john 拥有的 bash 进程
pgrep -u john bash
显示进程名称和PID
默认情况下,pgrep 仅显示 PID。也可以使用 -l 选项列出进程名称
pgrep -l bash
示例输出
1234 bash
5678 bash
匹配部分名称(使用正则表达式)
此命令匹配命令行中包含字符串 apache 的进程,而不仅仅是名称中包含该字符串的进程
pgrep -f apache
通过命令行参数搜索进程
使用特定参数搜索进程(例如,使用 URL 搜索 curl 进程)
pgrep -f "curl http://example.com"
排除进程
列出除与 bash 匹配的所有进程
pgrep -v -f "bash"
按父进程ID(PPID) 搜索
查找特定父进程的所有子进程
pgrep -P 1234
查找当前shell的PID
pgrep -P $$
仅返回bash进程的第一个匹配项
pgrep -o bash
获取特定用户组的所有进程
pgrep -g
pgrep -g staff
搜索使用特定端口的进程
ss -ltnp | grep ':8080' | pgrep -f
要搜索使用端口 8080 的进程(通过 netstat 或 ss),再通过管道传给 pgrep
指定输出的PID分隔符
pgrep ssh -d' '
示例输出
1039 2257 6850 31279
正则精准匹配
pgrep '^ssh$' -l
^表示以某字符串开头,$表示以某字符串结尾