(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之外的信号,则会优先执行这个信号,然后再执行信号捕捉函数(如果前面的信号没有让程序结束或暂停)。