什么是Linux信号和信号阻塞?( 二 )


5 。5 字段sa_flags是一组掩码的合成值 , 指示信号处理时所应该采取的一些行为 , 各掩码的含义为:
(1)SA_RESETHAND ---处理完毕要捕捉的信号后 , 将自动撤消信号处理函数的注册 , 即必须再重新注册信号处理函数 , 才能继续处理接下来产生的信号 。
(2)SA_NODEFER ---在处理信号时 , 如果又发生了其它的信号 , 则立即进入其它信号的处理 , 等其它信号处理完毕后 , 再继续处理当前的信号 , 即递规地处理 。如果sa_flags包含了该掩码 , 则结构体sigaction的sa_mask将无效;
(3)SA_RESTART--- 如果在发生信号时 , 程序正阻塞在某个系统调用 , 例如调用read函数 , 则在处理完毕信号后 , 接着从阻塞的系统返回 。
该掩码符合普通的程序处理流程 , 所以一般来说 , 应该设置该掩码 , 否则信号处理完后 , 阻塞的系统调用将会返回失败;
(4)SA_SIGINFO ---指示结构体的信号处理函数指针是哪个有效 , 如果sa_flags包含该掩码 , 则sa_sigactiion指针有效 , 否则是sa_handler指针有效 。
需要注意的是:
函数sigprocmask是全程阻塞 , 在sigprocmask中设置了阻塞集合后 , 被阻塞的信号将不能再被信号处理函数捕捉 , 直到重新设置阻塞信号集合 。而在sigaction注册信号处理函数时 , 选择阻塞的信号集只是在处理捕捉的信号时 , 才对指定的其他信号进行阻塞 。


以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!

「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助: