手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

kill(1)

名称

kill - 终止进程或向进程发送信号

用法概要

/usr/bin/kill -s signal_name pid...
/usr/bin/kill -l [exit_status]
/usr/bin/kill [-signal_name] pid...
/usr/bin/kill [-signal_number] pid...

描述

kill 实用程序会向每个 pid 操作数指定的一个或多个进程发送信号。

针对每个 pid 操作数,kill 实用程序执行与使用以下参数调用 kill(2) 函数等效的操作:

  1. pid 操作数的值用作 pid 参数。

  2. sig 参数是由 –s 选项、signal_name 选项或 signal_number 选项指定的值,如果这些选项都未指定,则是由 SIGTERM 指定的值。

接收信号的进程必须属于当前用户,除非用户为超级用户。

有关 shell 内置版本的 kill 的描述,请参见“附注”。

选项

支持以下选项:

–l

(字母 ell。)如果未指定操作数,则会写入实现支持的 signal_name 的所有值。如果指定了 exit_status 操作数,并且它是 ? shell 特殊参数的值且 wait 与信号终止的进程对应,则会写入与终止了进程的信号对应的 signal_name。如果指定了 exit_status 操作数,并且它是某个信号编号的无符号十进制整数值,则将写入与该信号对应的 signal_name。否则,结果不确定。

–s signal_name

使用 <signal.h> 描述中定义的符号名称之一指定要发送的信号。signal_name 的值不区分大小写,且不带 SIG 前缀。此外,符号名称 0 也可以识别,它代表信号值零。发送对应的信号而非 SIGTERM。

signal_name

等效于 –s signal_name

signal_number

指定一个非负数十进制整数 signal_number(代表用来代替 SIGTERM 的信号)作为对 kill(2) 的有效调用中的 sig 参数。

操作数

支持下列操作数:

pid

以下各项之一:

  1. 一个十进制整数,指定要向其发送信号的进程或进程组。由 pid 操作数的正值、负值和零值选择的进程与针对 kill 函数所描述的相同。如果指定了进程编号 0,则会向进程组中的所有进程发送信号。如果第一个 pid 操作数为负数,则应当在它前面加上 −−,以免将其解释为选项。

  2. 一个作业控制作业 ID,标识要向其发送信号的后台进程组。作业控制作业 ID 表示法只适用于在当前 shell 执行环境中调用的 kill

pid 这一作业控制作业 ID 类型仅在支持作业控制选项的系统上可用。

exit_status

一个十进制整数,指定信号编号或被信号终止的进程的退出状态。

用法

可使用 ps(1) 来查找进程编号。

kill 在自己的实用程序执行环境中运行时,不要求作业控制作业 ID 表示法按预期工作。在下述任一示例中:

example% nohup kill %1 &
example% system( "kill %1");

kill 在一个不同的环境中运行,并且与 shell 对作业编号有着不同的理解。

输出

输出

未指定 –l 选项时,将不使用标准输出。

指定了 –l 选项时,将按以下格式写入每个信号的符号名称:

"%s%c", <signal_name>, <separator>

其中 <signal_name> 是大写的且不带 SIG 前缀,而 <separator> 则是一个换行符或空格字符。对于最后写入的信号,<separator> 是一个换行符。

同时指定了 –l 选项和 exit_status 操作数时,将按以下格式写入相应信号的符号名称:

"%s\n", <signal_name>

示例

示例 1 Sending the kill signal

以下任意命令:

example% kill -9 100 -165
example% kill -s kill 100 -165
example% kill -s KILL 100 -165

会向进程 ID 为 100 的进程以及进程组 ID 为 165 的所有进程发送 SIGKILL 信号,并且假定发送方进程有权向指定的进程发送该信号且指定的进程存在。

示例 2 避免开头的负数的歧义

为避免初始参数为负数所带来的歧义(即不确定指定的是信号编号还是进程组),系统始终认为指定的是前者。因此,要向某个进程组(例如 123)发送缺省信号,应用程序应使用类似于以下命令之一的命令:

example% kill -TERM -123
example% kill -- -123

环境变量

有关影响 kill 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH。

退出状态

将返回以下退出值:

0

为每个 pid 操作数找到了至少一个匹配的进程,并且至少为一个匹配的进程成功处理了指定的信号。

>0

出现错误。

属性

有关下列属性的说明,请参见 attributes(5)

/usr/bin/kill、csh、ksh88、sh

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

ksh

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)
接口稳定性
Uncommitted(未确定)

另请参见

csh(1)getconf(1)jobs(1)ksh(1)ksh88(1)ps(1)sh(1)shell_builtins(1)wait(1)kill(2)signal(3C)signal.h(3HEAD)attributes(5)environ(5)standards(5)

附注

/usr/bin/kill

支持的实时信号的数量是由 getconf(1)_POSIX_RTSIG_MAX 定义的。

sh

Bourne shell sh 有一个内置版本的 kill,可以针对由 jobid 标识的进程提供与 kill 命令相同的功能。sh 语法为:


kill [ -sig ] [ pid ] [ %job ]...
kill -l

csh

C-shell csh 也有一个内置的 kill 命令,其语法为:


kill [-sig][pid][%job]...
kill -l

csh kill 内置命令向指定的进程 ID、指定的作业或当前作业发送 TERM(终止)信号(缺省情况下)或指定的信号。信号可通过编号或名称指定。无缺省值。键入 kill 不会向当前作业发送信号。如果发送的信号是 TERM(终止)或 HUP(挂起),则还会向作业或进程发送一个 CONT(继续)信号。

–l

列出可发送的信号名称。

ksh88

ksh88 kill 的语法为:


kill [-sig][pid][%job]...
kill -l

ksh88 kill 向指定的作业或进程发送 TERM(终止)信号或指定的信号。信号可通过编号或名称指定(如 signal.h(3HEAD) 中指定的一样,但要去掉 SIG 前缀)。如果发送的信号是 TERM(终止)或 HUP(挂起),如果作业或进程已停止,则会向其发送 CONT(继续)信号。参数 job 可以是不属于某个活动作业的进程的进程 ID。如果使用第二种形式,即 kill –l,则会列出信号编号和名称。

ksh

ksh kill 的语法为:


kill [-n signum] [-s signame] job ...
kill [-n signum] [-s signame] -l [arg ...]

使用未指定 –l 的第一种形式时,kill 会向由job 指定的一个或多个进程发送信号。这通常会终止进程,除非信号被捕获或忽略。

job 指定为以下之一:

number

job 的进程 ID。

-number

job 的进程组 ID。

%number

作业编号。

%string

名称以 string 开头的作业。

%?string

名称包含 string 的作业。

%+
%%

当前作业。

%-

前一个作业。

如果未使用 –n–s 选项指定信号,则会使用 SIGTERM 信号。

如果指定了 –l 但未指定 arg,则 kill 会将信号列表写入到标准输出。否则,arg 可以是一个信号名称,或者是一个数字(表示信号编号或者被信号终止的进程的退出状态)。如果指定了名称,则会将对应的信号编号写入到标准输出。如果指定了编号,则会将对应的信号名称写入到标准输出。

–l

列出信号名称或信号编号,而不是如上所述发送信号。不可指定 –n–s 选项。

–n signum

指定要发送的信号编号。信号编号无法跨平台移植,但以下情况除外:

0

没有信号。

1

HUP

2

INT

3

QUIT

6

ABRT

9

KILL

14

ALRM

15

TERM

–s signame

指定要发送的信号名称。信号名称源自它们在 <signal.h> 中的名称,但不带 SIG 前缀,而且不区分大小写。kill –l 将生成当前平台上的信号列表。

ksh 中的 kill 退出时将返回下列值之一:

0

为每个作业操作数找到了至少一个匹配的进程,并且至少向一个匹配的进程成功发送了指定的信号。

>0

出现错误。