Bootstrap

Linux pgrep 命令详解

简介

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
查找当前 shellPID
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

^表示以某字符串开头,$表示以某字符串结尾
;