killpg(2) - Linux 手册页
名称
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 必须等于目标进程的实际用户 ID 或保存的设置用户 ID(saved set-user-ID)。对于 SIGCONT 信号,只要发送进程和接收进程属于同一个会话即可。
返回值
成功时返回零。出错时返回 -1,并相应地设置 errno。
错误
- EINVAL
Sig 不是一个有效的信号编号。
EPERM
进程没有权限向任何目标进程发送信号。
ESRCH
在 pgrp 指定的进程组中找不到任何进程。
ESRCH
进程组参数为 0,但发送进程本身没有进程组。
符合
SVr4, 4.4BSD (killpg() 函数调用首次出现在 4BSD 中), POSIX.1-2001。
说明
BSD 类型系统和 System V 类型系统在权限检查方面存在多种差异。请参见 kill() 的 POSIX 解释说明。POSIX 未提及的一个区别涉及返回值 EPERM:BSD 文档规定,当至少有一个目标进程权限检查失败时,不发送任何信号并返回 EPERM;而 POSIX 文档规定仅当所有目标进程权限检查均失败时才返回 EPERM。
在 Linux 上,killpg() 是作为库函数实现的,它内部调用了 kill(-pgrp, sig)。
参见
getpgrp(2), kill(2), signal(2), capabilities(7), credentials(7)