SIGSUSPEND - Linux手册页

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

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/