linux操作系统信号捕捉函数之sigaction用法小结

(1)sigaction函数:注册一个信号捕捉函数(不参与捕捉信号,信号由内核捕捉),并修改原来的信号处理动作

(2)函数原型及头文件

             头文件:#include<signal.h>

            函数原型:int sigaction(int signum,const struct sigaction*act,struct sigaction*oldact);

(3)返回值:成功返回值为0.失败返回值为-1

(4)结构体参数:struct sigaction

           struct sigaction{

                               void  (*sa_handler)(int);//信号捕捉函数的函数指针

                               void  (*sa_sigaction)(int ,siginfo_t*,void*);//当sa_flag==SA_SIGINFO,使用此函数

                               sigset_t sa_mask;//信号捕捉函数执行时指定的临时信号集

                                int sa_flags;//通常设置为0,表示默认属性,即信号捕捉函数期间自动屏蔽本信号

                               void    (*sa_restorer)(void);//舍弃不用

                        };

(5)sigaction函数实现:

(6)sigaction使用注意点

         1)在信号捕捉函数执行期间,如果遇到sa_mask屏蔽信号字中的信号,则会发生阻塞,等到捕捉函数执行完毕后再处理这个信号。

         2)在信号捕捉函数执行期间,阻塞的常规信号不支持排队,产生多次只记录一次。如果再次发捕获信号,则会再次进入信号捕捉函数。

        3)如果在信号捕捉函数执行期间,遇到sa_mask之外的信号,则会优先执行这个信号,然后再执行信号捕捉函数(如果前面的信号没有让程序结束或暂停)。

猜你喜欢

转载自blog.csdn.net/xx18030637774/article/details/82252072
今日推荐