sigprocmask(2) - Linux 手册页
名称
sigprocmask - 检查和修改阻塞信号
概要
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
glibc 的功能测试宏要求(参见 feature_test_macros(7))
- sigprocmask(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
描述
sigprocmask() 用于获取和/或修改调用线程的信号掩码。信号掩码是当前阻止对调用者传递的信号集合(有关更多详细信息,请参阅 signal(7))。
调用的行为取决于 how 的值,如下所示。
- SIG_BLOCK
- 阻塞信号的集合是当前集合与 set 参数的并集。
- SIG_UNBLOCK
- set 中的信号从当前阻塞信号集合中移除。尝试取消阻塞未阻塞的信号是允许的。
- SIG_SETMASK
- 阻塞信号的集合设置为参数 set。
- 如果 oldset 非 NULL,则信号掩码的先前值将存储在 oldset 中。
如果 set 为 NULL,则信号掩码保持不变(即,忽略 how),但当前信号掩码的值仍然在 oldset 中返回(如果它非 NULL)。
在多线程进程中使用 sigprocmask() 是未定义的;请参阅 pthread_sigmask(3)。
返回值
sigprocmask() 成功时返回 0,出错时返回 -1。
错误
- EFAULT
set 或 oldset 参数指向进程分配地址空间之外。
EINVAL
how 中指定的值无效。
符合
POSIX.1-2001。
说明
无法阻塞 SIGKILL 或 SIGSTOP。尝试这样做会被静默忽略。
进程中的每个线程都有自己的信号掩码。
通过 fork(2) 创建的子进程继承其父进程信号掩码的副本;信号掩码在 execve(2) 中被保留。
如果 SIGBUS、SIGFPE、SIGILL 或 SIGSEGV 在它们被阻塞时产生,结果是未定义的,除非该信号由 kill(2)、sigqueue(3) 或 raise(3) 产生。
有关操作信号集的详细信息,请参见 sigsetops(3)。
参见
kill(2), pause(2), sigaction(2), signal(2), sigpending(2), sigsuspend(2), pthread_sigmask(3), sigqueue(3), sigsetops(3), signal(7)