使用函数sigprocmask()阻塞信号的传递,只是延迟信号的到达。信号会在解除阻塞后继续传递所有的信号阻塞函数都使用称作信号集的数据结构来表明受到影响的信号。每一个操作都包括两个阶段:创建信号集,传递信号集给特定的库函数。下面说明信号集 和相关的数据类型: sigset_t:这个数据类型用来代表信号的集合,通过函数 sigemptyset()使之不包含任何信号,然后用sigaddset()函数加入需要的信号。 int sigemptyset(sigset_t *set):初始化信号集set使之不包含任何信号,这个函数总是返回0。 int sigaddset(

wKioL1couVCy4zAOAABBl4RlCro401.png

wKioL1couVCj7E-SAAAdtf0Qckg004.png

sigset_t *set, intsignum):该函数把信号signum加入到信号集set中,需要注意的是这个函数只是修改了set变量本身,并不作其它操作。该函数成功操作 返回0,失败返回-1,错误代码设置成EINVAL,表示signum不是有效的信号代码。 int sigismember(const sigset_t *set,intsignum):这个函数测试信号signum是 否包含在信号集合set中,如果包含返回1,不包含返回0,出错返回-1。错误代码也只 有一个EINVAL,表示signum不是有效的信号代码 SIG_BLOCK,阻塞set中包含的信号。意思是说把set中的信号加到当前的信号掩码中去,新的信号掩码是set和旧信号掩码的并集。 SIG_UNBLOCK,解除set中信号的阻塞,从当前信号掩码中去除set中的信号。 SIG_SETMASK,设置信号掩码,既按照set中的信号重新设置信号掩码。