您的位置:首页 > 运维架构 > Linux

linux练习 十一 信号的阻塞和捕捉

2017-12-19 20:01 381 查看
#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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百炼成钢