「kill(1)」-

  LINUX MANUAL PAGES

向进程发送信号

命令语法格式

kill [-signal|-s signal|-p] [-q value] [-a] [–] pid|name…

kill -l [number] | -L

命令描述

命令kill将指定的信号发送到指定的进程或进程组。

如果未指定信号,则发送TERM信号。 此信号的默认操作是终止该过程。 该信号应该优先于KILL信号(编号9)使用,因为进程可以安装TERM信号的处理程序,以便在以有序方式终止之前执行清理步骤。 如果在发送TERM信号之后进程没有终止,则可以使用KILL信号;请注意,后一个信号无法捕获,因此不会使目标进程有机会在终止之前执行任何清理动作。

如果signal为0,则不发送实际信号,但仍执行错误检查。

命令支持的选项及含义

进程列表取值

pid
每个pid可以是以下四种之一:

n,其中n>0。向PID为n的进程发送信号。

0,发信号通知当前进程组中的所有进程。

-1,向PID大于1的所有进程发送信号。

-n,其中n>1。向进程组n中的所有进程发送信号。当给出形式为’-n’的参数,并且它意味着表示一个进程组时,则必须首先指定一个信号,或者必须在参数之前加上’–‘选项,否则kill会将n视为信号。

name
将使用此名称调用的所有进程都将发出信号。

命令可用选项

-s, –signal signal
指定要发送的信号。可以是数字或者信号名。

-l, –list [number]
打印信号名称列表,或将给定的信号编号number转换为名称。 信号可以在/usr/include/linux/signal.h中找到。

-L, –table
与-l类似,但它将打印信号名称及其相应的数字。

-a, –all
不要将“命令名到PID”的转换限制为与当前进程具有相同UID的进程。

-p, –pid
仅打印指定名称的进程的PID,不发送任何信号。

–verbose
打印PID,这些进程将被发送与kill一起的信号。

-q, –queue value
使用sigqueue(3)而不是kill(2)。 参数value是一个与信号一起发送的整数。 如果接收进程使用SA_SIGINFO标志为sigaction(2)安装了此信号的处理程序,则它可以通过siginfo_t结构的si_sigval字段获取此数据。

注意事项

大多数现代Shell都有一个内置的kill命令,其用法与此处描述的命令非常相似。选项–all,–pid,–queue以及通过命令名指定进程的可能性是本地扩展。

尽管可以将多线程进程中的一个线程的TID(线程ID,参见gettid(2))指定为kill的参数,但是信号仍然指向进程(即整个线程组)。 换句话说,不可能在多线程进程中向明确选择的线程发送信号。 信号将被传递到目标进程中任意选择的线程,该线程不会阻塞信号。 有关更多详细信息,请参阅signal(7)和clone(2)中CLONE_THREAD的说明。

退出状态

0 成功;

1 失败;

64 部分成功(当指定了多个进程时);

使用示例

结束所有可以结束的进程:

# kill -9 -1

获取数值为11的信号名:

# kill -l 11

在表中列出所有可用的信号:

# kill -L

向指定的进程中发送默认信号(SIGTERM):

# kill 123 543 2341 3453

如上示例。

相关手册

bash(1), tcsh(1), sigaction(2), kill(2), sigqueue(3), signal(7)

参考文献

更新日志

  • 07/11/2018 创建文章