遵循规范

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

错误说明

EAGAIN
达到RLIMIT_SIGPENDING资源限制,并且sig是实时信号。
EAGAIN
可用的内核内存不足,并且sig是实时信号。
EINVAL
指定了无效的线程ID,线程组ID或信号。
EPERM
没有权限。有关所需的权限,请参见kill(2)。
ESRCH
不存在具有指定线程ID(和线程组ID)的进程。

说明

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

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

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

语法

int tkill(int tid, int sig);

int tgkill(int tgid, int tid, int sig);

注意:tkill()没有glibc包装器;请参阅注释。

版本

从Linux 2.4.19 / 2.5.4开始支持tkill()。在Linux 2.5.75中添加了tgkill()。

tgkill()的库支持已在版本2.30中添加到glibc。

备注

有关线程组的说明,请参见clone(2)中的CLONE_THREAD的描述。

Glibc不提供tkill()的包装器;使用syscall(2)调用它。在glibc 2.30之前,tgkill()还没有包装函数。

名称

tkill,tgkill-向线程发送信号

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

TKILL - Linux手册页

Linux程序员手册 第2部分
更新日期: 2019-08-02

另外参见

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

日期:2019-08-20 17:59:35 来源:oir作者:oir