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

setoldset 参数指向进程分配地址空间之外。

EINVAL

how 中指定的值无效。

符合

POSIX.1-2001。

说明

无法阻塞 SIGKILLSIGSTOP。尝试这样做会被静默忽略。

进程中的每个线程都有自己的信号掩码。

通过 fork(2) 创建的子进程继承其父进程信号掩码的副本;信号掩码在 execve(2) 中被保留。

如果 SIGBUSSIGFPESIGILLSIGSEGV 在它们被阻塞时产生,结果是未定义的,除非该信号由 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)

引用自

clone(2), pth(3), rt_sigqueueinfo(2), select(2), select_tut(2), setcontext(2), sgetmask(2), sigblock(2), signalfd(2), sigpause(2), sigpause(3), sigset(3), sigtimedwait(2), sigvec(3), swapcontext(2), swapcontext(3)