简介
killall 命令,顾名思义,是 “kill all” 的缩写,即“杀死全部”。它允许你通过进程的名称,而不是进程ID(PID),来向一个或多个进程发送信号。killall 命令简化了向多个具有相同名称的进程发送信号的过程,无需手动查找每个进程的PID。
使用方式
killall [-Z, --context pattern] [-e, --exact] [-g, --process-group] [-i, --interactive] [-n, --ns PID] [-o, --older-than TIME] [-q, --quiet] [-r, --reg‐exp] [-s, --signal SIGNAL, -SIGNAL] [-u, --user user] [-v, --verbose] [-w, --wait] [-y, --younger-than TIME] [-I, --ignore-case] [-V, --version] [--] name ...
killall -l
killall -V, --version
常用选项
-e, --exact
:精确匹配长进程名(命令名)。如果进程名超过15个字符,那么可能无法获取完整的进程名。这种情况下,killall
默认会终止名称与前15个字符匹配的进程,而使用了-e
后上述进程就会被忽略。此时如果使用了-v
则会额外输出对应的忽略提示信息。-I, --ignore-case
:忽略进程名称的大小写差异。-g, --process-group
:终止对应进程所属的进程组。如果找到多个进程并且属于同一个进程组,对于同一个进程组也只会发一次终止信号。-i, --interactive
:在终止进程前,交互式询问用户确认。-l, --list
:列出所有支持的信号名称。-n, --ns
:根据指定PID
的PID
命名空间匹配进程。(默认匹配所有命名空间)-o, --older-than
:仅终止运行时间超过指定时间的进程。时间以浮点数加单位表示,单位包括s、m、h、d、w、M、y,分别表示秒、分、时、天、周、月、年。-q, --quiet
:若无进程被终止,不输出错误信息。-r, --regexp
:将进程名模式解释为POSIX
扩展正则表达式。-s, --signal, -SIGNAL
:指定要发送的信号(默认为SIGTERM
终止信号)。-u, --user
:仅对指定用户拥有的进程执行操作,可省略进程名。-v, --verbose
:显示信号是否成功发送的详细信息。-V, --version
:显示版本信息。-w, --wait
:等待所有被终止的进程完全退出。-y, --younger-than
:仅终止指定时间之后启动的进程。-Z, --context
:根据安全上下文匹配进程,仅终止安全上下文与指定正则表达式匹配的进程。此选项需放在命令行其他参数前,且可省略进程名。
文件
/proc
:proc
文件系统的位置。
参考示例
终止所有名为 test 的进程
killall test
以指定用户身份终止进程
killall -u username test
使用 -u username
选项可以指定终止 username
这个用户的 test
进程。
向某个进程发送特定信号
killall -9 test
向 test
进程发送 SIGKILL
信号。
终止运行超过指定时间的进程
killall -o 10m test
此处使用 -o 10m
可以终止运行超过 10 分钟的 test
进程。
终止并查看具体的终止信息
killall -v test
使用 -v
选项可以显示命令执行的详细信息:
jay@jaylinuxlenovo:~/test$ killall -v test
Killed test(3886303) with signal 15
Killed test(3886472) with signal 15
匹配进程名时忽略大小写
killall -I TEST
使用 -I
选项在匹配进程名是会忽略大小写差异:
jay@jaylinuxlenovo:~/test$ killall -I -v TEST
Killed test(3889789) with signal 15
注意事项
-
killall
会每秒检查一次目标进程是否仍在运行,直到所有进程结束才返回。若进程忽略信号、无法终止,或长时间处于僵尸状态,命令可能无限等待。 -
通过文件终止进程仅适用于在运行期间持续打开的可执行文件,若不是一个纯粹的可执行文件(例如某些脚本在执行后会关闭,此时就无法通过脚本名来匹配到进程),则无法被这样终止。
-
在一个非 Linux 系统中,
killall
可能与预想的行为不符,尤其是在特权用户下使用。 -
killall -w
在等待期间不会去检测是否存在原进程消失且其PID
被新进程使用的情况。这就有可能导致killall
被无限挂起或者误杀新创建的无关进程。 -
如果一个进程在运行期间修改了名字,则
killall
可能会无法正确匹配到这个进程。 -
killall
支持通过命令行指定的名称数量有限,遵循限制值 = (系统位数对应的 unsigned long 大小 × 8)
的规则,即对大多数 32 位系统来说这个限制值为 32,同样的,对于 64 位系统来说这个值通常为 64。