rt_sigqueueinfo(2) - Linux 手册页
名称
rt_sigqueueinfo, rt_tgsigqueueinfo - 队列化一个信号和数据概要
int rt_sigqueueinfo(pid_t tgid, int sig, siginfo_t *uinfo);
int rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig,
siginfo_t *uinfo);注意:这些系统调用没有 glibc 封装;请参阅 NOTES。描述
这些系统调用不适用于直接的应用程序使用;它们被提供是为了允许实现 sigqueue(3) 和 pthread_sigqueue(3)。
rt_sigqueueinfo() 系统调用将信号 sig 发送到具有 ID tgid 的线程组。(“线程组”一词与“进程”同义,并且 tid 对应于传统的 UNIX 进程 ID。)该信号将被传递到线程组中的一个任意成员(即,一个当前未阻塞该信号的线程)。
uinfo 参数指定与信号一起发送的数据。此参数是指向类型为 siginfo_t 的结构的指针,该结构在 sigaction(2) 中描述(并通过包含 <sigaction.h> 定义)。调用者应在此结构中设置以下字段
- si_code
- 这必须是 Linux 内核源代码文件 include/asm-generic/siginfo.h 中的一个 SI_* 代码,限制是该代码必须为负数(即,不能是 SI_USER,内核使用它来指示由 kill(2) 发送的信号)并且不能(从 Linux 2.6.39 开始)是 SI_TKILL(内核使用它来指示使用 tgkill(2) 发送的信号)。
- si_pid
- 应将其设置为进程 ID,通常是发送者的进程 ID。
- si_uid
- 应将其设置为用户 ID,通常是发送者的实际用户 ID。
- si_value
- 此字段包含与信号一起发送的用户数据。有关更多信息,请参阅 sigqueue(3) 的最后一个参数(union sigval)的描述。
在内部,内核将 si_signo 字段设置为 sig 中指定的值,以便信号的接收者也可以通过该字段获取信号编号。
rt_tgsigqueueinfo() 系统调用类似于 rt_sigqueueinfo(),但将信号和数据发送到由 tgid(线程组 ID)和 tid(该线程组中的线程)组合指定的单个线程。
返回值
成功时,这些系统调用返回 0。发生错误时,它们返回 -1,并且 errno 被设置为指示错误。错误
- EAGAIN
- 已达到可以排队的信号限制。(有关更多信息,请参阅 signal(7)。)
- EINVAL
- sig、tgid 或 tid 无效。
- EPERM
- 调用者没有权限向目标发送信号。有关所需的权限,请参阅 kill(2)。或者:uinfo->si_code 无效。
- ESRCH
- rt_sigqueueinfo(): 没有找到匹配 tgid 的线程组。
rt_tgsigqueinfo(): 没有找到匹配 tgid 和 tid 的线程。
版本
rt_sigqueueinfo() 系统调用是在 Linux 2.2 版本中添加的。rt_tgsigqueueinfo() 系统调用是在 Linux 2.6.31 版本中添加的。符合
这些系统调用是 Linux 特有的。说明
由于这些系统调用不适用于应用程序使用,因此没有 glibc 包装函数;如果您想直接调用它们,请使用 syscall(2)。与 kill(2) 一样,空信号 (0) 可用于检查指定的进程或线程是否存在。