sigqueue 子例程
用途
将信号排队到进程。
库
标准 C 库 (libc.a)
语法
#include <signal.h>
int sigqueue (pid, signo, value)
pid_t pid;
int signo;
const union sigval value;描述
sigqueue 子例程使由 signo 参数指定的信号与 value 参数指定的值一起发送到由 pid 参数指定的进程。 如果 signo 参数为零,那么将执行错误检查,但实际上不会发送任何信号。 这可用于检查 pid 参数的有效性。
一个进程具有将信号排队到另一个进程所需的条件与 kill 子例程的条件相同。
sigqueue 子例程立即返回。 如果 SA_SIGINFO 由指定信号的接收进程设置,并且如果资源可用于对信号进行排队,那么该信号将排队并发送到接收进程。 如果没有为 signo 参数设置 SA_SIGINFO ,那么至少向接收进程发送一次信号。
如果 SIGRTMIN 到 SIGRTMAX 范围内的多个信号应该可用于传递,那么将首先传递编号最小的信号。
参数
| 项 | 描述 |
|---|---|
| pid | 指定要将信号发送到的进程。 |
| 信号 | 指定信号号。 |
| value | 指定要与信号一起发送的值。 |
返回值
成功完成时, sigqueue 子例程返回零。 如果不成功,则返回-1并设置errno变量以指示错误。
错误代码
在下列情况下, sigqueue 子例程将失败:
| 项 | 描述 |
|---|---|
| 再次 | 没有可用于对信号进行排队的资源。 进程已排队仍在接收器处暂挂的 SIGQUEUE_MAX 信号,或者已超过系统范围的资源限制。 |
| EINVAL | signo 参数的值是无效或不受支持的信号号,或者如果所选信号可以停止或继续接收过程。 AIX®不支持下列信号的队列:SIGKILL、SIGSTOP、SIGTSTP、SIGCONT、SIGTTIN、SIGTTOU 和 SIGCLD。 |
| EPERM | 进程没有将信号发送到接收进程的相应特权。 |
| ESRCH | 由 pid 参数指定的进程不存在。 |