1、函数原型理解
void (*signal(int sig,void(*func)(int)))(int);
指定使用sig指定的信号编号处理信号的方法。
简化上式 :
1)typdef void( *sighandler)(int);// 重命名一个函数指针
原型简化为---------> void(*signal(int sig,sighandler handler))(int);
2)将signal函数拎出来:void (*)(int);//这是一个函数指针
--------->sighandler signal(int sig,sighandler handler);
handler指定程序可以处理信号的三种方式之一:
默认处理(SIG_DFL): 信号由该特定信号的默认动作处理
忽略信号(SIG_IGN): 忽略信号,即使没有意义,代码执行仍然继续。
函数处理程序: 定义一个特定的函数来处理信号
2、函数参数说明:
第一个参数是要捕捉的信号(查看信号:kill -l,9号SIGKILL信号不能被捕捉);
第二个参数表示我们要对信号进行的处理方式。
1)忽略信号//如:忽略Ctrl+c信号
int main()
{
signal(2,SIG_IGN);//忽略信号
while(1)
{
printf("aaaaa");
sleep(6);
}
return 0;
}
2) 默认动作
int main()
{
signal(2,SIG_DFL);//默认处理信号
while(1)
{
printf("aaaaa");
sleep(6);
}
return 0;
}
3)自定义处理函数//捕捉到这个信号后,按照handler处理函数进行操作
#include<signal.h>
void handler(int signo)
{
printf("signal:%d\n:",signo);
}
int main()
{
signal(2,handler);
while(1)
{
printf("hello world\n");
sleep(6);
}
return 0;
}