kill 或 killpg 子例程
用途
将信号发送给一个进程或一组进程。
库
标准 C 库 (libc.a)
语法
#include <sys/types.h>
#include <signal.h>
描述
杀 子例程将由 信号 参数指定的信号发送至由 流程 参数指定的进程或进程组。
要向另一个进程发送信号,发送进程的实际用户标识或有效用户标识必须与接收进程的实际用户标识或有效用户标识相匹配,并且呼叫进程必须具有 root 用户权限。
进程标识为 0 和 1 的进程是特殊进程,有时在这里分别称为 proc0 和 proc1。
进程可以向自身发送信号。
注: 发送信号并不表示该操作成功。 所有信号操作必须通过系统上每个强制实施的访问控制策略所规定的访问检查。
为 BSD 兼容性提供了以下接口:
killpg(ProcessGroup, Signal)
int ProcessGroup; Signal;此接口等效于:
if (ProcessGroup < 0)
{
errno = ESRCH;
return (-1);
}
return (kill(-ProcessGroup, Signal));参数
| 项 | 描述 |
|---|---|
| 处理 | 指定一个进程或进程组的标识。 如果 流程 参数大于 0 ,那么由 信号 参数指定的信号将发送到 流程 参数所标识的进程。 如果 流程 参数为 0 ,那么由 信号 参数指定的信号将发送到所有进程 ( proc0 和 proc1除外) ,这些进程的进程组标识与发送方的进程组标识相匹配。 如果 Process(进程)参数的值不是-1,而是负值,并且调用进程通过了要发出信号的进程的访问检查,那么Signal(信号)参数指定的信号将发送给所有进程,但不包括proc0和proc1。 如果调用进程的用户 ID 具有根用户权限,则会向proc0和proc1 以外的所有进程发出信号。 如果进程参数的值为负值-1 除外),则信号参数指定的信号将发送给进程组 ID 等于进程参数绝对值的所有进程。 如果 Process(进程)参数的值为-1,Signal(信号)参数指定的信号将发送给该进程有权发送该信号的所有进程。 |
| Signal | 指定信号。 如果信号参数为空值,那么将执行错误检查,但不会发送任何信号。 此参数用于检查 流程 参数是否有效。 |
| ProcessGroup | 指定进程组。 |
返回值
成功完成后, 杀 子例程将返回值 0。 否则,返回值为-1,并设置errno全局变量来指示错误。
错误代码
杀 子例程不成功,并且如果下列其中一项或多项为真,那么不发送任何信号:
| 项 | 描述 |
|---|---|
| EINVAL | 信号 参数不是有效的信号号码。 |
| EINVAL | 信号 参数指定 SIGKILL, SIGSTOP, SIGTSTP或 SIGCONT 信号,并且 流程 参数是 1 (proc1)。 |
| ESRCH | 找不到与 流程 参数指定的进程相对应的任何进程。 |
| EPERM | 实际或有效的用户标识与接收进程的实际或有效用户标识不匹配,否则呼叫进程不具有 root 用户权限。 |