tkill(2) - Linux 手册页

名称

tkill, tgkill - 向线程发送信号

概要

int tkill(int tid, int sig);
int tgkill(int tgid, int tid, int sig);
注意:这些系统调用没有 glibc 封装;请参阅 NOTES。

描述

tgkill() 将信号 sig 发送到线程组 tgid 中线程 ID 为 tid 的线程。(相比之下,kill(2) 只能用于向整个进程(即线程组)发送信号,信号将被传递给该进程内的任意一个线程。)

tkill() 是 tgkill() 的过时前身。它只允许指定目标线程 ID,如果某个线程终止且其线程 ID 被回收,这可能会导致错误的线程被发送信号。请避免使用此系统调用。

如果 tgid 指定为 -1,则 tgkill() 等同于 tkill()。

这些是原始系统调用接口,旨在供线程库内部使用。

返回值

成功时返回零。出错时返回 -1,并相应地设置 errno

错误

EINVAL
指定了无效的线程 ID、线程组 ID 或信号。
EPERM
权限被拒绝。有关所需权限,请参见 kill(2)
ESRCH
不存在具有指定线程 ID(和线程组 ID)的进程。

版本

tkill() 自 Linux 2.4.19 / 2.5.4 起受支持。tgkill() 于 Linux 2.5.75 中添加。

符合

tkill() 和 tgkill() 是 Linux 特有的,不应在旨在可移植的程序中使用。

说明

有关线程组的解释,请参见 clone(2) 中对 CLONE_THREAD 的描述。

Glibc 不为这些系统调用提供封装器;请使用 syscall(2) 调用它们。

参见

clone(2), gettid(2), kill(2), rt_sigqueueinfo(2)

引用自

sigaction(2)