信号集
信号集可以用来表示一组信号,用sigprocmask
系列函数可以让应用程序对一些信号进行屏蔽。
类似于select
调用中的fd_set
一个信号对应一个比特位。
在信号中,这样的数据结构用sigsetg_t
表示。
#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);//测试指定位
回忆pause()
函数:
pause() causes the calling process (or thread) to sleep until a signal
is delivered that either terminates the process or causes the invoca‐
tion of a signal-catching function.
进程阻塞在pause
调用,直到收到信号。这个时候进程可能进入信号处理函数,也可能直接终止。
而sigpending
和sigprocmask
就可以对某些信号进行屏蔽。
为了查看当前哪些信号被屏蔽,引入了apue中的一个库函数:
核心思想就是利用sigismember
查看信号是否在屏蔽信号集中