KILLPG
章节:Linux 程序员手册 (2)
更新:2010-09-20
到 易美翻译 翻译 本页
名字
killpg - 发送信号给进程组
概要
#include <signal.h>
int killpg(int pgrp, int sig);
glibc 需要特性测试宏(参看 feature_test_macros(7)):
-
killpg():
- _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
描述
killpg() 发送信号 sig 给进程组 pgrp。见 signal(7) 里的可用信号列表。
如果 pgrp 是 0,killpg() 发送信号给调用进程的进程组。(POSIX 说:如果 pgrp 是小于或等于 1,其行为是未定义的。)
当一个进程有权限发送信号时,它必须是一个特权进程(Linux:有 CAP_KILL 能力),或者发送进程的真实或有效用户 ID 必须等于目标进程的真实或保存设置用户ID。对于信号 SIGCONT 只要求发送和接收进程属于同一个会话。
返回值
成功时,返回0。错误时,返回 -1,并把 errno 设置为合适的值。
错误
-
EINVAL
- sig 不是一个有效的信号编号。 EPERM
- 进程没有权限把指定信号发送给目标进程任何一个。 ESRCH
- 在指定的进程组 pgrp 里没有找到任何进程。 ESRCH
- 进程给出了 0 但是发送没有一个进程组。
遵循于
SVr4、4.4BSD(killpg() 函数首次出现在 4BSD)、POSIX.1-2001。
注意
在 BSD 风格的系统里和System V 风格的系统里有多个不同的权限检测。参考 POSIX 的 kill() 原理。POSIX 提及的不同与 EPERM 返回值有关:BSD 文档说没有信号被发送并且至少有一个目标进程没有权限时返回 EPERM;而 POSIX 则说当所有目标进程的权限检测失败返回 EPERM。
在 Linux 系统里,killpg() 是作为一个库函数来实现的,它使用 kill(-pgrp, sig) 来完成工作。