//#include < signal.h>
//#include < stdio.h>
//#include < stdlib.h>
void my_func(int sign_no)
{
if(sign_no==SIGINT)
printf("I have get SIGINT\n");
else if(sign_no==SIGQUIT)
printf("I have get SIGQUIT\n");
}
int main()
{
printf("Waiting for signal SIGINT or SIGQUIT \n ");
/*注册信号处理函数*/
signal(SIGINT, my_func);
signal(SIGQUIT, my_func);
pause();
exit(0);
}
//#include < signal.h>
//#include < stdio.h>
//#include < stdlib.h>
/自定义信号处理函数/
void my_func(int sign_no)
{
if(sign_no==SIGBUS)
printf("I have get SIGBUS\n");
}
int main()
{
printf("Waiting for signal SIGBUS \n ");
/*注册信号处理函数*/
signal(SIGBUS,my_func);
pause();//将进程挂起直到捕捉到信号为止
exit(0);
}
//#include < sys/types.h>
//#include < unistd.h>
//#include < signal.h>
//#include < stdio.h>
//#include < stdlib.h>
void my_func(int signum)
{
printf("If you want to quit,please try SIGQUIT\n");
}
int main()
{
sigset_t set,pendset;
struct sigaction action1,action2;
if(sigemptyset(&set)<0)
perror("sigemptyset");
if(sigaddset(&set,SIGQUIT)<0)
perror("sigaddset");
if(sigaddset(&set,SIGINT)<0)
perror("sigaddset");
if(sigprocmask(SIG_BLOCK,&set,NULL)<0)
perror("sigprocmask");
else
{
printf("blocked\n");
sleep(5);
}
if(sigprocmask(SIG_UNBLOCK,&set,NULL)<0)
perror("sigprocmask");
else
printf("unblock\n");
while(1)
{
if(sigismember(&set,SIGINT))
{
sigemptyset(&action1.sa_mask);
action1.sa_handler=my_func;
sigaction(SIGINT,&action1,NULL);
}
else if(sigismember(&set,SIGQUIT))
{
sigemptyset(&action2.sa_mask);
action2.sa_handler = SIG_DFL;
sigaction(SIGTERM,&action2,NULL);
}
}
}