SIGSUSPEND - Linux手册页
Linux程序员手册 第2部分
更新日期: 2019-03-06
名称
sigsuspend,rt_sigsuspend-等待信号
语法
#包括
int sigsuspend(const sigset_t * mask);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
sigsuspend():_POSIX_C_SOURCE
说明
sigsuspend()用mask给定的掩码临时替换调用线程的信号掩码,然后挂起线程,直到传递其信号是调用信号处理程序或终止进程的信号为止。
如果信号终止了该过程,则sigsuspend()不返回。如果捕获到信号,则sigsuspend()在信号处理程序返回之后返回,并且信号掩码恢复到调用sigsuspend()之前的状态。
无法阻止SIGKILL或SIGSTOP;在掩码中指定这些信号,对线程的信号掩码没有影响。
返回值
sigsuspend()始终返回-1,并将errno设置为指示错误(通常为EINTR)。
错误说明
- EFAULT
- mask指向不是进程地址空间有效部分的内存。
- EINTR
- 呼叫被信号打断;信号(7)。
遵循规范
POSIX.1-2001,POSIX.1-2008。
备注
通常,sigsuspend()与sigprocmask(2)结合使用,以防止在执行关键代码段期间传递信号。调用者首先使用sigprocmask(2)阻止信号。关键代码完成后,调用方将通过使用sigprocmask(2)返回的信号掩码(在oldset参数中)调用sigsuspend()来等待信号。
有关操纵信号集的详细信息,请参见sigsetops(3)。
C library/kernel differences
最初的Linux系统调用名为sigsuspend()。但是,在Linux 2.2中添加了实时信号后,该系统调用支持的固定大小的32位sigset_t类型不再适合此目的。因此,添加了新的系统调用rt_sigsuspend()以支持扩展的sigset_t类型。新的系统调用使用第二个参数size_t sigsetsize,它指定掩码中设置的信号的大小(以字节为单位)。当前需要此参数具有sizeof(sigset_t)值(或错误EINVAL结果)。 glibc sigsuspend()包装器函数向我们隐藏了这些细节,在内核提供时透明地调用rt_sigsuspend()。
另外参见
kill(2),pause(2),sigaction(2),signal(2),sigprocmask(2),sigwaitinfo(2),sigsetops(3),sigwait(3),signal(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。