Go to main content

手册页部分 1:用户命令

退出打印视图

更新时间: 2022年7月27日 星期三
 
 

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 指定的值。

The signaled process must belong to the current user unless kill is run with the {PRIV_PROC_OWNER} privilege, as may be done using the Process Management rights profile.

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

选项

支持以下选项:

–l

(The letter ell.)如果未指定操作数,则会写入实现支持的 signal_name 的所有值。If an exit_status operand is specified and it is a value of the ? shell special parameter and wait corresponding to a process that was terminated by a signal, the signal_name corresponding to the signal that terminated the process is written.如果指定了 exit_status 操作数,并且它是某个信号编号的无符号十进制整数值,则将写入与该信号对应的 signal_name。否则,结果不确定。

–s signal_name

Specifies the signal to send, using one of the symbolic names defined in the <signal.h> description.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 &
system("kill %1");

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

输出

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

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

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

where the <signal_name> is in uppercase, without the SIG prefix, and the <separator> is either a newline character or a space character.For the last signal written, <separator> is a newline character.

同时指定了 –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

环境变量

See environ(7) for descriptions of the following environment variables that affect the execution of kill: LANG, LC_ALL, LC_CTYPE, LC_MESSAGES, and NLSPATH.

退出状态

将返回以下退出值:

0

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

> 0

出现错误。

属性

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

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

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

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(7), environ(7), privileges(7), standards(7)

附注

/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

指定要发送的信号名称。The signal names are derived from their names in <signal.h> without the SIG prefix and are case insensitive. kill –l generates the list of signals on the current platform.

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

0

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

> 0

出现错误。