PGREP(1) General Commands Manual PGREP(1)

# 名称

pgrep, pkill, pidwait - 根据名称和其他属性查找进程、向进程发送信号或等待进程结束

# 概述

**pgrep** \[*选项* ...] *模式*

**pkill** \[*选项* ...] *模式*

**pidwait** \[*选项* ...] *模式*

# 描述

**pgrep** 查找当前正在运行的进程，然后将与选择标准匹配的进程 ID 列出到标准输出。所有标准都必须匹配。例如，

$ pgrep -u root sshd

将会仅列出名称包含 **sshd** **且** 被 **root** 拥有的进程。另一方面，

$ pgrep -u root,daemon

则会列出被 **root** **或** **daemon** 拥有的进程。

**pkill** 会将指定的信号（默认为 **SIGTERM**）发送给各个进程，而不是将它们列出到标准输出。

**pidwait** 会等待各个进程结束，而不是将它们列出到标准输出。

# 选项

**-信号**

[**--signal** *信号*](#signal)

指定发送到每个被匹配的进程的信号。信号可以使用数字或符号名称。在 **pgrep** 或 **pidwait** 模式下，只能使用长选项，并且除非与 **--require-handler** 结合使用，来筛选出已针对特定信号注册了用户空间信号处理程序的进程，否则该选项无效。

[**-a**, **--list-full**](#a)

列出进程的完整命令行和进程 ID。（仅限 **pgrep**。）

[**-A**, **--ignore-ancestors**](#A)

忽略 **pgrep**、**pkill** 或 **pidwait** 的所有祖先。例如，当使用 **sudo** 或类似工具进行提权时，此选项可能很有用。

[**-c**, **--count**](#c)

阻止正常输出；改为打印匹配进程的数量。当 count 选项未找到匹配时，例如返回零时，该命令将返回非零值。请注意，对于 pkill 和 pidwait，数量是匹配进程的数量，而不是成功发出信号或等待的进程的数量。

[**-d**, **--delimiter** *分隔符*](#d)

设置用于分隔输出中各个进程 ID 的字符串（默认为换行符）。（仅限 **pgrep**。）

[**-e**, **--echo**](#e)

显示被杀死的进程的名称和 PID。（仅限 **pkill**。）

[**-f**, **--full**](#f)

*模式* 通常仅与进程名称进行匹配。使用 **-f** 时，将匹配完整的命令行。

[**-F**, **--pidfile** *文件*](#F)

从 *文件* 读取 *PID*。此选项在使用 **pkill** 或 **pidwait** 时比使用 **pgrep** 时更有用。文件名 "-" 可以让程序从 *标准输入* 读取。与 **--pid** 选项冲突。

[**-g**, **--pgroup** *进程组*,...](#g)

仅匹配列出的进程组 ID 中的进程。进程组 0 表示 **pgrep**、**pkill** 或 **pidwait** 自己的进程组。

[**-G**, **--group** *gid*,...](#G)

仅匹配具有列出的真实组 ID 的进程。可以使用数值或符号化的值。

[**-H**, **--require-handler**](#H)

仅匹配注册了所发送的信号的用户空间信号处理程序的进程。

[**-i**, **--ignore-case**](#i)

匹配进程时不区分大小写。

[**-l**, **--list-name**](#l)

列出进程名称和进程 ID。（仅限 **pgrep**。）

[**-L**, **--logpidfile**](#L)

如果 pidfile（参见 **-F**）未锁定，则失败。

[**-m**, **--mrelease**](#m)

发送信号后，调用 **process\_mrelease**() 系统调用以立即释放目标进程的内存。

[**-n**, **--newest**](#n)

仅选择最新（最近启动）的匹配进程。

[**-o**, **--oldest**](#o)

仅选择最旧（最早启动）的匹配进程。

[**-O**, **--older** *秒*](#O)

选择年龄大于指定秒数的进程。

[**-p**, **--pid** *pid*,...](#p)

仅匹配具有列出的父进程 ID 的进程。与 **--pidfile** 选项冲突。

[**-P**, **--parent** *ppid*,...](#P)

仅匹配具有列出的父进程 ID 的进程。

[**-q**, **--queue 值**](#q)

随信号一起发送一个整数 *值*。此选项会将该值传递给 [**pidfd\_send\_signal**(2)](/man/os/procps/pidfd_send_signal.2)，或者使用 [**sigqueue**(3)](/man/os/procps/sigqueue.3) 替代 [**kill**(2)](/man/os/procps/kill.2)。如果接收进程使用 [**sigaction**(2)](/man/os/procps/sigaction.2) 的 SA\_SIGINFO 标志安装了该信号的处理程序，则它可以通过 siginfo\_t 结构的 si\_value 字段获取该值。

[**-Q**, **--shell-quote**](#Q)

以用于 shell 的加引号的格式输出命令行。（仅限 **pgrep**。）

[**-r**, **--runstates** *D,R,S,Z,*...](#r)

仅匹配具有匹配的进程状态的进程。

[**-s**, **--session** *sid*,...](#s)

仅匹配具有列出的会话 ID 的进程。会话 ID 0 表示 **pgrep**、**pkill** 或 **pidwait** 自己的会话 ID。

[**-t**, **--terminal** *终端*,...](#t)

仅匹配被列出的终端所控制的进程。指定的终端名称不应包含 "/dev/" 前缀。

[**-u**, **--euid** *euid*,...](#u)

仅匹配具有列出的有效用户 ID 的进程。可以使用数值或符号化的值。

[**-U**, **--uid** *uid*,...](#U)

仅匹配具有列出的真实用户 ID 的进程。可以使用数值或符号化的值。

[**-v**, **--inverse**](#v)

反向匹配。此选项通常在使用 **pgrep** 或 **pidwait** 时使用。使用 **pkill** 时，短选项被禁用，以避免意外使用该选项。

[**-w**, **--lightweight**](#w)

使用 **pgrep** 或 **pidwait** 时，显示所有线程 id，而不是 pid。使用 **pkill** 时，此选项被禁用。

[**-x**, **--exact**](#x)

仅匹配名称（指定了 **-f** 时，为命令行）**完全** 与 *模式* 匹配的进程。

[**--cgroup 名称,...**](#cgroup)

匹配给定的控制组 (cgroup) v2 名称。参见 [**cgroups**(7)](/man/os/procps/cgroups.7)

[**--env 名称**\[*=值*\],...](#env)

匹配含有这些环境变量的进程。如果未定义参数 *=值*，则只匹配变量名。

[**--ns pid**](#ns)

匹配处于同一个命名空间的进程。需要以 root 身份运行才能匹配其他用户的进程。请参阅 **--nslist** 了解如何限制要匹配的命名空间。

[**--nslist 名称,...**](#nslist)

仅匹配指定的命名空间。 可用的命名空间：ipc、mnt、net、pid、user、uts。

[**--quiet**](#quiet)

不要向标准输出写入任何内容（仅限 **pgrep**）。

[**-V**, **--version**](#V)

显示版本信息并退出。

[**-h**, **--help**](#h)

显示帮助并退出。

# 操作数

*模式*

指定用于匹配进程名称或命令行的扩展正则表达式。

# 示例

示例 1：查找 **named** 守护进程的进程 ID：

$ pgrep -u root named

示例 2：让 **syslog** 重新读取它的配置文件：

$ pkill -HUP syslogd

示例 3：提供所有 **bash** 进程的详细信息：

$ ps -fp $(pgrep -d, -x bash)

示例 4：提高所有 **chrome** 进程的 nice 值：

$ renice +4 $(pgrep chrome)

示例 5：等待一个 PID 已知的进程结束：

$ echo ${PID} | pidwait -F -

# 退出状态

**0**

一个或多个进程符合匹配标准。对于 **pkill** 和 **pidwait**，还必须对至少一个进程成功地发出信号或等待。

**1**

没有匹配的进程或者没能向任何一个进程发出信号。

**2**

命令行有语法错误。

**3**

致命错误：内存不足等。

# 备注

用于匹配的进程名称长度限制为 15 个字符，位于 /proc/*pid*/stat 的输出中。使用 **-f** 选项来匹配完整的命令行，即 /proc/*pid*/cmdline。线程可能不具有与父进程相同的进程名称，但具有相同的命令行。

正在运行的 **pgrep**、**pkill** 或 **pidwait** 进程永远不会匹配它自己。

如果 */proc* 使用 *subset=pid* 选项挂载，则 **-O --older** 选项将失败且不进行提示。

若能获取目标进程的进程文件描述符，**pkill** 将尝试使用 [**pidfd\_send\_signal**(2)](/man/os/procps/pidfd_send_signal.2) 替代 [**kill**(2)](/man/os/procps/kill.2) 或 [**sigqueue**(3)](/man/os/procps/sigqueue.3) 向目标进程发送信号。

# 错误

选项 **-n** 和 **-o** 以及 **-v** 不能同时使用。如果您需要这样做，请告诉我。

如果进程在同一个 tick 内启动（通常为百分之一秒，但并非总是如此），则选项 **-n** 和 **-o** 将无法区分哪些进程在同一个 tick 内启动，可能导致结果错误。

会报告已不存在的进程（僵尸进程）。

**pidwait** 需要 [**pidfd\_open**(2)](/man/os/procps/pidfd_open.2) 系统调用，该调用首次出现在 Linux 5.3 中。

# 参见

[**killall**(1)](/man/os/procps/killall.1), [**kill**(1)](/man/os/procps/kill.1), [**ps**(1)](/man/os/procps/ps.1), [**skill**(1)](/man/os/procps/skill.1), [**kill**(2)](/man/os/procps/kill.2), [**sigaction**(2)](/man/os/procps/sigaction.2), [**pidfd\_open**(2)](/man/os/procps/pidfd_open.2), [**pidfd\_send\_signal**(2)](/man/os/procps/pidfd_send_signal.2), [**sigqueue**(3)](/man/os/procps/sigqueue.3), [**cgroups**(7)](/man/os/procps/cgroups.7), [**regex**(7)](/man/os/procps/regex.7), [**signal**(7)](/man/os/procps/signal.7)

# 报告错误

请将错误报告发送到 [procps@freelists.org](mailto:procps@freelists.org)。

2025-12-29 procps-ng

---

Document: pgrep(1) from procps 4.0.7-r3 (Chainguard OS)
Source: https://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-4.0.7.tar.xz
