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)

引用自

csh(1), sigaction(2)