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

-a, --list-full
    列出进程的完整命令行和进程 ID。（仅限 pgrep。）

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

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

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

-e, --echo
    显示被杀死的进程的名称和 PID。（仅限 pkill。）

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

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

-g, --pgroup 进程组,...
    仅匹配列出的进程组 ID 中的进程。进程组 0 表示 pgrep、pkill 或 pidwait 自己的进程组。

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

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

-i, --ignore-case
    匹配进程时不区分大小写。

-l, --list-name
    列出进程名称和进程 ID。（仅限 pgrep。）

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

-m, --mrelease
    发送信号后，调用 process_mrelease() 系统调用以立即释放目标进程的内存。

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

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

-O, --older 秒
    选择年龄大于指定秒数的进程。

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

-P, --parent ppid,...
    仅匹配具有列出的父进程 ID 的进程。

-q, --queue 值
    随信号一起发送一个整数 值。此选项会将该值传递给 pidfd_send_signal(2)，或者使用 sigqueue(3) 替代 kill(2)。如果接收进程使用 sigaction(2) 的 SA_SIGINFO 标志安装了该信号的处理程序，则它可以通过 siginfo_t 结构的 si_value 字段获取该值。

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

-r, --runstates D,R,S,Z,...
    仅匹配具有匹配的进程状态的进程。

-s, --session sid,...
    仅匹配具有列出的会话 ID 的进程。会话 ID 0 表示 pgrep、pkill 或 pidwait 自己的会话 ID。

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

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

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

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

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

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

--cgroup 名称,...
    匹配给定的控制组 (cgroup) v2 名称。参见 cgroups(7)

--env 名称[=值],...
    匹配含有这些环境变量的进程。如果未定义参数 =值，则只匹配变量名。

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

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

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

-V, --version
    显示版本信息并退出。

-h, --help
    显示帮助并退出。

操作数

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

示例
示例 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) 替代 kill(2) 或 sigqueue(3) 向目标进程发送信号。

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

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

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

pidwait 需要 pidfd_open(2) 系统调用，该调用首次出现在 Linux 5.3 中。

参见
killall(1), kill(1), ps(1), skill(1), kill(2), sigaction(2), pidfd_open(2), pidfd_send_signal(2), sigqueue(3), cgroups(7), regex(7), signal(7)

报告错误
请将错误报告发送到 procps@freelists.org。