SIGQUEUE - Linux手册页
Linux程序员手册 第3部分
更新日期: 2017-09-15
名称
sigqueue-将信号和数据排队到进程
语法
#包括
int sigqueue(pid_t pid,int sig,const union sigval value);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
sigqueue():_POSIX_C_SOURCE> = 199309L
说明
sigqueue()将sig中指定的信号发送到PID在pid中给出的进程。发送信号所需的权限与kill(2)相同。与kill(2)一样,空信号(0)可用于检查是否存在具有给定PID的进程。
value参数用于指定与信号一起发送的数据的伴随项(整数或指针值),并且具有以下类型:
union sigval { int sival_int; void *sival_ptr; };
如果接收进程已使用sigaction(2)的SA_SIGINFO标志为该信号安装了处理程序,则它可以通过siginfo_t结构的si_value字段(作为第二个参数传递给该处理程序)获取此数据。此外,该结构的si_code字段将设置为SI_QUEUE。
返回值
成功后,sigqueue()返回0,表示信号已成功排队到接收进程中。否则,返回-1并将errno设置为指示错误。
错误说明
版本
sigqueue()和基础的rt_sigqueueinfo()系统调用首先出现在Linux 2.2中。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
sigqueue() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008。
备注
如果此函数导致向调用它的进程发送信号,并且该信号未被调用线程阻塞,并且没有其他线程愿意处理此信号(通过解除阻塞或等待该信号)使用sigwait(3)),则在此函数返回之前,必须至少向该线程传递一些信号。
C library/kernel differences
在Linux上,sigqueue()是使用rt_sigqueueinfo(2)系统调用实现的。系统调用的第三个参数不同,它是siginfo_t结构,该结构将提供给接收进程的信号处理程序,或由接收进程的sigtimedwait(2)调用返回。在glibc sigqueue()包装器内部,此参数uinfo初始化如下:
uinfo.si_signo = sig; /* Argument supplied to sigqueue() */ uinfo.si_code = SI_QUEUE; uinfo.si_pid = getpid(); /* Process ID of sender */ uinfo.si_uid = getuid(); /* Real UID of sender */ uinfo.si_value = val; /* Argument supplied to sigqueue() */
另外参见
kill(2),rt_sigqueueinfo(2),sigaction(2),signal(2),pthread_sigqueue(3),sigwait(3),signal(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。