#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void myfunc(int signo)
{
if(SIGQUIT == signo)
{
printf("recv SIGQUIT sig\n");
}
else if(SIGINT == signo)
{
printf("recv SIGINT sig\n");
}
}
int main(int argc,char * argv[])
{
sigset_t sigset;
struct sigaction action1;
if(sigemptyset(&sigset) < 0)
{
perror("sigemptyset");
exit(-1);
}
if(sigaddset(&sigset,SIGQUIT) < 0)
{
perror("sigaddset");
printf("%s:%d\n",__FUNCTION__,__LINE__);
exit(-1);
}
printf("%s:%d\n",__FUNCTION__,__LINE__);
if(sigaddset(&sigset,SIGINT) < 0)
{
perror("sigaddset");
exit(-1);
}
sigprocmask(SIG_BLOCK,&sigset,NULL);
printf("block sigset\n");
sleep(5);
printf("unblock sigset\n");
sigemptyset(&action1.sa_mask);
action1.sa_handler = myfunc;
if(sigaction(SIGQUIT,&action1,NULL) < 0)
{
perror("sigaction");
}
if(sigaction(SIGINT,&action1,NULL) < 0)
{
perror("sigaction");
}
sigprocmask(SIG_UNBLOCK,&sigset,NULL);
while(1)
{
sleep(5);
printf("wait for sig\n");
}
}
linux练习 十一 信号的阻塞和捕捉
最新推荐文章于 2023-01-12 22:15:05 发布