Linux信号掩码和信号处理函数

1、信号掩码——被阻塞的信号集
每个进程都有一个用来描述哪些信号传送来将被阻塞的信号集,如果某种信号在某个进程的阻塞信号集中,则传送到该进程的此种信号将会被阻塞。当前被进程阻塞的信号集也叫信号掩码,类型为sigset_t。每个进程都有自己的信号掩码,且创建子进程时,子进程会继承父进程的信号掩码。

2、信号阻塞和忽略的区别
阻塞的概念与忽略信号是不同的:操作系统在信号被进程解除阻塞之前不会将信号传递出去,被阻塞的信号也不会影响进程的行为,信号只是暂时被阻止传递;当进程忽略一个信号时,信号会被传递出去,但进程将信号丢弃。

每个进程都有一个信号掩码,信号掩码是一个“位图”,如果位图中某位标识1,表示该位对应的信号被暂时屏蔽。如果标识为0,表示进程可以接收这个信号。

System V signal API信号处理函数除了sigset外,还有以下几个。

sighold()函数
把指定的信号增加到信号掩码中去(将位图中对应的位标识为1),这样就暂时屏蔽了该信号。
返回值:成功返回0,失败返回-1。

sigrelse()函数
从信号掩码中移除指定的信号,这样进程就可以接收该信号了。
返回值:成功返回0,失败返回-1。

sigignore()函数
将信号配置为SIG_IGN,即忽略该信号。
返回值:成功返回0,失败返回-1。
sigignore(SIGALRM)相当于sigset(SIGALRM, SIG_IGN)
继续阅读Linux信号掩码和信号处理函数