PGREP(1) | General Commands Manual | PGREP(1) |
名称¶
pgrep, pkill, pidwait - 根据名称和其他属性查找进程、向进程发送信号或等待进程结束
概述¶
pgrep [option ...] pattern
pkill [option ...] pattern
pidwait [option ...] pattern
描述¶
pgrep 查找当前正在运行的进程,然后将与选择标准匹配的进程 ID 列出到标准输出。所有标准都必须匹配。例如,
- $ pgrep -u root sshd
will only list the processes whose name include sshd AND owned by root. On the other hand,
- $ pgrep -u root,daemon
则会列出被 root 或 daemon 拥有的进程。
pkill 会将指定的信号(默认为 SIGTERM)发送给各个进程,而不是将它们列出到标准输出。
pidwait 会等待各个进程结束,而不是将它们列出到标准输出。
选项¶
- -信号
- --signal 信号
- 指定发送到每个被匹配的进程的信号。信号可以使用数字或符号名称。在 pgrep 或 pidwait 模式下,只能使用长选项,并且除非与 --require-handler 结合使用,来筛选出已针对特定信号注册了用户空间信号处理程序的进程,否则该选项无效。
- -c, --count
- 阻止正常输出;改为打印匹配进程的数量。当 count 选项未找到匹配时,例如返回零时,该命令将返回非零值。请注意,对于 pkill 和 pidwait,数量是匹配进程的数量,而不是成功发出信号或等待的进程的数量。
- -d, --delimiter 分隔符
- 设置用于分隔输出中各个进程 ID 的字符串(默认为换行符)。(仅限 pgrep。)
- -e, --echo
- 显示被杀死的进程的名称和 PID。(仅限 pkill。)
- -f, --full
- 模式 通常仅与进程名称进行匹配。使用 -f 时,将匹配完整的命令行。
- -g, --pgroup pgrp,...
- 仅匹配列出的进程组 ID 中的进程。进程组 0 表示 pgrep、pkill 或 pidwait 自己的进程组。
- -G, --group gid,...
- 仅匹配具有列出的真实组 ID 的进程。可以使用数值或符号化的值。
- -i, --ignore-case
- 匹配进程时不区分大小写。
- -l, --list-name
- 列出进程名称和进程 ID。(仅限 pgrep。)
- -a, --list-full
- 列出进程的完整命令行和进程 ID。(仅限 pgrep。)
- -n, --newest
- 仅选择最新(最近启动)的匹配进程。
- -o, --oldest
- 仅选择最旧(最早启动)的匹配进程。
- -O, --older 秒
- 选择年龄大于指定秒数的进程。
- -P, --parent ppid,...
- 仅匹配具有列出的父进程 ID 的进程。
- -s, --session sid,...
- 仅匹配具有列出的会话 ID 的进程。会话 ID 0 表示 pgrep、pkill 或 pidwait 自己的会话 ID。
- -t, --terminal term,...
- 仅匹配被列出的终端所控制的进程。指定的终端名称不应包含 "/dev/" 前缀。
- -u, --euid euid,...
- 仅匹配具有列出的有效用户 ID 的进程。可以使用数值或符号化的值。
- -U, --uid uid,...
- 仅匹配具有列出的真实用户 ID 的进程。可以使用数值或符号化的值。
- -v, --inverse
- 反向匹配。此选项通常在使用 pgrep 或 pidwait 时使用。使用 pkill 时,短选项被禁用,以避免意外使用该选项。
- -w, --lightweight
- 使用 pgrep 或 pidwait 时,显示所有线程 id,而不是 pid。使用 pkill 时,此选项被禁用。
- -x, --exact
- 仅匹配名称(指定了 -f 时,为命令行)完全 与 模式 匹配的进程。
- -F, --pidfile 文件
- Read PIDs from file. This option is more useful for pkill or pidwait than pgrep. The filename "-" can be used to read from STDIN.
- -L, --logpidfile
- 如果 pidfile(参见 -F)未锁定,则失败。
- -r, --runstates D,R,S,Z,...
- 仅匹配具有匹配的进程状态的进程。
- -A, --ignore-ancestors
- 忽略 pgrep、pkill 或 pidwait 的所有祖先。例如,当使用 sudo 或类似工具进行提权时,此选项可能很有用。
- -H, --require-handler
- 仅匹配注册了所发送的信号的用户空间信号处理程序的进程。
- --cgroup name,...
- 匹配给定的控制组 (cgroup) v2 名称。参见 cgroups(8)
- --env name[=value],...
- Match on process that have these environment variables. If the =value parameter is not defined then only the variable name is matched.
- --ns pid
- 匹配处于同一个命名空间的进程。需要以 root 身份运行才能匹配其他用户的进程。请参阅 --nslist 了解如何限制要匹配的命名空间。
- --nslist name,...
- 仅匹配指定的命名空间。 可用的命名空间:ipc、mnt、net、pid、user、uts。
- -q, --queue 值
- 使用 sigqueue(3) 而不是 kill(2),并通过 值 参数指定要与信号一起发送的整数。如果接收进程使用 sigaction(2) 的 SA_SIGINFO 标志安装了该信号的处理程序,则它可以通过 siginfo_t 结构的 si_value 字段获取该数据。
- -V, --version
- 显示版本信息并退出。
- -h, --help
- 显示帮助并退出。
操作数¶
- 模式
- 指定用于匹配进程名称或命令行的扩展正则表达式。
示例¶
示例 1:查找 named 守护进程的进程 ID:
- $ pgrep -u root named
示例 2:让 syslog 重新读取它的配置文件:
- $ pkill -HUP syslogd
示例 3:提供所有 xterm 进程的详细信息:
- $ ps -fp $(pgrep -d, -x xterm)
示例 4:提高所有 chrome 进程的 nice 值:
- $ renice +4 $(pgrep chrome)
Example 5: Wait for a process with a known PID to finish:
- $ 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 选项将失败且不进行提示。
错误¶
选项 -n 和 -o 以及 -v 不能同时使用。如果您需要这样做,请告诉我。
会报告已不存在的进程(僵尸进程)。
pidwait 需要 pidfd_open(2) 系统调用,该调用首次出现在 Linux 5.3 中。
参见¶
ps(1), regex(7), signal(7), sigqueue(3), killall(1), skill(1), kill(1), kill(2), cgroups(8).
作者¶
报告错误¶
Please send bug reports to procps@freelists.org.
2024-02-05 | procps-ng |