信号集
#include <signal.h>
int sigemptyset(sigset_t *set); //初始化set指向的信号集,使其为空
int sigfillset(sigset_t *set); //初始化set指向的信号集,使其包含所有信号
int sigaddset(sigset_t *set, int signum); // 添加一个信号
int sigdelset(sigset_t *set, int signum); //删除一个信号
int sigismember(const sigset_t *set, int signum);//测试指定位
信号掩码
信号掩码中添加一个信号,通常有如下几种方式:
⚫ 当应用程序调用 signal()或 sigaction()函数为某一个信号设置处理方式时,进程会自动将该信号添加到信号掩码中, 这样保证了在处理一个给定的信号时,如果此信号再次发生,那么它将会被阻塞;
当然对于 sigaction()而言,是否会如此,需要根据 sigaction()函数是否设置了 SA_NODEFER 标志
而定;当信号处理函数结束返回后,会自动将该信号从信号掩码中移除。
⚫ 使用 sigaction()函数为信号设置处理方式时,可以额外指定一组信号,当调用信号处理函数时将该
组信号自动添加到信号掩码中, 当信号处理函数结束返回后,再将这组信号从信号掩码中移除; 通过 sa_mask 参数进行设置,参考 8.4.2 小节内容。
⚫ 除了以上两种方式之外,还可以使用 sigprocmask()系统调用,随时可以显式地向信号掩码中添加/移除信号。
sigprocmask() | #include <signal.h> int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); | 随时向信号掩码中添加或移除信号 |