在(1)中是最简单的信号处理函数,当你按两次Ctrl+c时,并没有两次输出,是因为这样的信号是不可靠信号,如果要让信号正确的让程序处理执行,我们必须让程序支持信号的嵌套。看代码
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
int temp=0;
void signal_handle(int signo)
{
printf("recive SIGINT/n");
sleep(5);
printf("The temp values is %d/n",temp++);
}
int main()
{
struct sigaction act;
act.sa_handler = signal_handle;
//让信号支持嵌套
act.sa_flags = SA_NOMASK;
//安装信号处理函数
sigaction(SIGINT,&act,NULL);
while(1);
return 0;
}
这里我们给出的信号帮定函数是sigaction,sigaction结构体的sa_handler是信号的处理函数,sa_flags是给出信号的处理方式,这里是让信号支持嵌套,这样信号就不会丢失。