默认处理
忽略处理
捕获处理
默认和忽略都不用深究了,之前就都是默认忽略的
捕获处理:注册等钱进程在OS中,某一个信号的处理方法,注册一个处理方法,指向的函数就是处理方法
用signal函数吃力SIGINT信号
#include <stdio.h>
#include <signal.h>
void func(int sig)
{
printf("signal for %d.\n", sig);
}
int main(void)
{
signal(SIGINT, func);
printf("befor while(1);\n");
while(1);
printf("after while(1);\n");
return 0;
}
细节:signal的返回值是之前的处理方法(默认/忽略/捕获)
signal绑定一个捕获函数后,信号发生后 会自动执行绑定的捕获函数,并且把信号编号给捕获函数
#include <stdio.h>
#include <signal.h>
void func(int sig)
{
printf("signal for %d.\n", sig);
}
int main(void)
{
//signal(SIGINT, func);//捕获
//signal(SIGINT, SIG_DFL);//默认
signal(SIGINT, SIG_IGN);//忽略
printf("befor while(1);\n");
while(1);
printf("after while(1);\n");
return 0;
}
signal函数的意思是:
对那个信号,
做什么处理(默认/忽略/捕获)
sigaction可以一次得到新旧捕获数值,可以同时,也可以单独,可以单独获取旧的(不设置新的就能知道旧的)
signal只能在设置新的同时才能获取旧的,需要两次才能得到旧的,设置新的,在恢复旧的