简介
Linux
中的 pgrep
命令是一个功能强大的实用程序,用于根据名称、用户、组和其他标准搜索进程。它允许轻松地找到匹配给定模式的运行进程的进程id (pid
)。该命令对于脚本或需要查找特定进程而不需要使用 ps
手动查找的管理员特别有用。
常用选项
-
-u <user>
:查找特定用户拥有的进程 -
-g <group>
:查找特定组中的进程 -
-P <pid>
:查找给定父PID
的子进程 -
-f <pattern>
:与完整命令行进行匹配(不仅仅是进程名称) -
-l
:显示进程名称及其PID
-
-o
:仅返回第一个匹配的进程 -
-v
:反向搜索(返回与模式不匹配的进程) -
-c <name>
:通过可执行命令(而不是名称)查找进程 -
-x
:完全匹配(即匹配命令的全名) -
-d <delimiter>
:指定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 <group_name>
pgrep -g staff
搜索使用特定端口的进程
ss -ltnp | grep ':8080' | pgrep -f
要搜索使用端口 8080 的进程(通过 netstat 或 ss),再通过管道传给 pgrep
指定输出的 PID
分隔符
pgrep ssh -d' '
示例输出
1039 2257 6850 31279
正则精准匹配
pgrep '^ssh$' -l
^表示以某字符串开头,$表示以某字符串结尾