通过信号屏蔽的方式对CTRL+C/CTRL+Z进行捕捉或者忽略
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int count_c=0;
int count_q=0;
void gotquit(int sig)
{
printf("signal:%d\n",sig);
if(count_c<9 && count_q<2)
{
if(sig==3)
{
printf("you press ctrl+\\:%d times\n",++count_q);
}
}
else
{
printf("ctrl+\\ times is over.\n");
//signal(SIGINT,SIG_DFL);
signal(SIGQUIT,SIG_DFL);
}
//printf("signal %d is captured\n",sig);
//signal(SIGINT,SIG_DFL);
}
void gotit(int sig)
{
printf("signal:%d\n",sig);
if(count_c<9 && count_q<2)
{
if(sig==2)
{
printf("you press ctrl+c:%d times\n",++count_c);
}
}
else
{
printf("ctrl+c times is over.\n");
signal(SIGINT,SIG_DFL);
}
}
int main()
{
//ctrl+c为2;ctrl+\为3
signal(SIGINT,gotit);
signal(SIGQUIT,gotquit);
while(1)
{
printf("Hello World!\n");
sleep(1);
}
}
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int count_usr1=0;
void gotusr1(int sig)
{
if(count_usr1<9)
{
printf("signal %d is captured %d times\n",sig,++count_usr1);
//signal(SIGUSR1,SIG_DFL);
}
else
{
printf("times is over\n");
signal(SIGUSR1,SIG_DFL);
abort();
}
}
int main()
{
signal(SIGINT,SIG_IGN);
signal(SIGQUIT,SIG_IGN);
signal(SIGUSR1,gotusr1);
while(1)
{
printf("Hello World!\n");
sleep(2);
}
}