命令行手册

Man » pkill 在线手册 - pkill 手册页的详细在线文档

🌍
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 结合使用以过滤具有特定信号的用户空间信号处理程序的进程,否则它不起作用。

-c, --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 file
从文件中读取 PID。此选项对于 pkill 或 pidwait 比 pgrep 更有用。

-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)。

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

--nslist name,...
仅匹配提供的命名空间。可用的命名空间:ipc、mnt、net、pid、user、uts。

-q, --queue value
使用 sigqueue(3) 而不是 [kill]({filename}../../kill)(2),并且 value 参数用于指定要与信号一起发送的整数。如果接收进程已使用 sigaction(2) 中的 SA_SIGINFO 标志安装了该信号的处理程序,那么它可以通过 siginfo_t 结构的 si_value 字段获取此数据。

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

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

参数

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

示例

示例 1:查找名为 daemon 的进程的进程 ID:

$ pgrep -u root named

示例 2:使 syslog 重新读取其配置文件:

$ pkill -HUP syslogd

示例 3:显示有关所有 xterm 进程的详细信息:

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

示例 4:使所有 chrome 进程运行得更好:

$ renice +4 $(pgrep chrome)

退出状态

0     匹配到一个或多个进程。对于 pkill 和 pidwait,必须成功地对一个或多个进程发送信号或等待它们。
1     没有匹配的进程,或者无法对任何进程发送信号。
2     命令行中存在语法错误。
3     发生致命错误:内存不足等。

笔记

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

正在运行的 pgreppkillpidwait 进程绝不会将其自身报告为匹配项。

如果 /proc 使用 subset=pid 选项挂载,则 -O --older 选项将静默失败。

错误

选项 -n-o 以及 -v 不能组合使用。 如果您需要这样做,请告诉我。

已终止的进程将被报告。

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

参见

ps(1), regex(7), signal(7), sigqueue(3), killall(1), skill(1), kill(1), kill(2), cgroups(8).

作者

Kjetil Torgrim Homme

报告错误

请将错误报告发送到 _