RT_SIGQUEUEINFO - Linux手册页

时间:2019-08-20 17:59:17  来源:igfitidea点击:

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

名称

rt_sigqueueinfo,rt_tgsigqueueinfo-将信号和数据排队

语法

int rt_sigqueueinfo(pid_t tgid, int sig, siginfo_t *info);

int rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig,
                      siginfo_t *info);

注意:这些系统调用没有glibc包装器。请参阅注释。

说明

rt_sigqueueinfo()和rt_tgsigqueueinfo()系统调用是用于向进程或线程发送信号加数据的低级接口。信号的接收者可以通过使用sigaction(2)SA_SIGINFO标志建立信号处理程序来获取随附的数据。

这些系统调用不能直接用于应用程序;提供它们是为了实现sigqueue(3)和pthread_sigqueue(3)。

rt_sigqueueinfo()系统调用将信号sig发送到ID为tgid的线程组。 (术语"线程组"与"进程"同义,tid对应于传统的UNIX进程ID。)信号将传递到线程组的任意成员(即,当前未阻塞的线程之一)信号)。

info参数指定信号所伴随的数据。该参数是指向siginfo_t类型的结构的指针,该结构在sigaction(2)中进行了描述(并通过include进行定义)。调用方应在此结构中设置以下字段:

si_code
This should be one of the SI_*

codes in the Linux kernel source file
include/asm-generic/siginfo.h.

If the signal is being sent to any process other than the caller itself,
the following restrictions apply:

*
该代码不能是大于或等于零的值。特别是,它不能是SI_USER,它由内核用于指示kill(2)发送的信号,也不能是SI_KERNEL,它用于指示内核生成的信号。
*
该代码不能(因为Linux 2.6.39起)是SI_TKILL,内核使用它来指示使用tgkill(2)发送的信号。
si_pid
应将其设置为进程ID,通常是发送方的进程ID。
si_uid
应该将其设置为用户ID,通常是发送者的真实用户ID。
si_value
该字段包含伴随信号的用户数据。有关更多信息,请参见sigqueue(3)的最后一个参数(联合sigval)。

在内部,内核将si_signo字段设置为sig中指定的值,以便信号的接收者也可以通过该字段获取信号编号。

rt_tgsigqueueinfo()系统调用类似于rt_sigqueueinfo(),但是将信号和数据发送到由tgid(线程组ID)和tid(该线程组中的线程)的组合指定的单个线程。

返回值

成功时,这些系统调用将返回0。错误时,它们将返回-1,并且将errno设置为指示错误。

错误说明

EAGAIN
已达到可排队的信号限制。 (有关更多信息,请参见signal(7)。)
EINVAL
sig,tgid或tid无效。
EPERM
呼叫者无权将信号发送到目标。有关所需的权限,请参见kill(2)。
EPERM
tgid指定了调用者以外的进程,并且info->si_code无效。
ESRCH
rt_sigqueueinfo():找不到与tgid匹配的线程组。

rt_tgsigqueinfo():找不到与tgid和tid匹配的线程。

版本

rt_sigqueueinfo()系统调用已在2.2版中添加到Linux。 rt_tgsigqueueinfo()系统调用已在2.6.31版中添加到Linux。

遵循规范

这些系统调用是特定于Linux的。

备注

由于这些系统调用不适合应用程序使用,因此没有glibc包装器函数。如果您想直接调用它们,请使用syscall(2)。

kill(2)一样,空信号(0)可用于检查指定的进程或线程是否存在。

另外参见

kill(2),pidfd_send_signal(2),sigaction(2),sigprocmask(2),tgkill(2),pthread_sigqueue(3),sigqueue(3),signal(7)

出版信息

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