sigprocmask sigaction

sigprocmask sigaction sigprocmask:用于随时添加信号屏蔽字;sigaction :signal增强版本,当处理信号时,可以随意添加信号屏蔽字sigset_tnewmask,oldmask,pendmask;signal(SIGINT,sig_handler);sigemptyset(&newmask);sigaddset(&…

大家好,又见面了,我是你们的朋友全栈君。

 

sigprocmask: 用于随时添加信号屏蔽字 ;

sigaction  : signal增强版本, 当处理信号时, 可以随意添加信号屏蔽字

   

   sigset_t newmask,oldmask,pendmask;
   signal(SIGINT,sig_handler);
   sigemptyset(&newmask);
   sigaddset(&newmask,SIGINT);

   //屏蔽SIGINT 
   sigprocmask(SIG_BLOCK,&newmask,&oldmask);
   //按ctrl+c
   for(int i =0 ; i < 3 ; ++i){
       sleep(1);
       write(1,".",1);
   }
  //SIGINT 是否置位
   sigpending(&pendmask);
   printf("pend sigint ?  %d\n",sigismember(&pendmask,SIGINT));
   puts("restore mask");
 //还原
   sigprocmask(SIG_SETMASK,&oldmask,NULL);
   puts("sigint unlock");

    while(1){
        sleep(1);
        write(1,".",1);
    }
void sig_handler(int sig,siginfo_t * info, void *p){

    printf("self pid:%d, send pid:%d , val:%d\n", getpid(),
    info->si_pid,info->si_value.sival_int);
}
int main(int argc , char ** argv , char ** env)
{
   struct sigaction act,oact;
   sigemptyset(&act.sa_mask);
   act.sa_flags =SA_SIGINFO;
   act.sa_sigaction = sig_handler;
   //act.sa_mask 用于屏蔽信号,当 sig_handler 被处理时
   sigaction(SIGUSR2,&act,&oact);
   pid_t  pid = getpid();
   printf("parent : %d\n", pid);
   if(fork() == 0){
            //子进程继承父进程 sigaction
            union  sigval v = {0};
            v.sival_int = 1000;
            pid_t pid = getpid();
            printf("child pid:%d sending sig\n", pid);
            sigqueue(getppid(),SIGUSR2,v);
            raise(SIGUSR2);

            for(int i = 0; i < 3; ++i){
                sleep(1);
                write(1,"b",1);
            }
            exit(0);
   }
   while(1){
       write(1,".",1);
       sleep(1);
   }





    return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141368.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WEB各种环境以及注意事项「建议收藏」

    WEB各种环境以及注意事项「建议收藏」WEB各种环境以及注意事项

    2022年4月22日
    83
  • 离散实验 判断集合之间是单射,满射还是双射

    离散实验 判断集合之间是单射,满射还是双射通过C++实现集合间映射关系判断思路:创建判断两个集合之间是否是单射,满射,双射的函数,同时也分别创建三个函数,里面存放两集合间的映射关系,再通过刚刚创建的判断函数,进行验证是否满足条件。涉及的数学知识1.单射:设f是由集合A到集合B的映射,如果所有x,y∈A,且x≠y,都有f(x)≠f(y),则称f为由A到B的单射。2.满射:如果每个可能的像至少有一个变量映射其上(即像集合B中的每个元素在A中都有一个或一个以上的原像),或者说值域任何元素都有至少有一个变量与之对应,那这个映射就叫做满射。3.双

    2022年5月1日
    116
  • git工具的使用方法[通俗易懂]

    一、SVN与git的区别SVN是“集成式”管理方式,所有的“版本控制器”都在中央服务器上,每个开发人员的的计算机都要连接到中央服务器上才能进行合作开发。开发人员一般只能在公司才能进行开发(因为中央服务器在公司),局限性较大。git是“分布式“管理方式,开放人员的每台计算机上都有一个“版本控制器”,每个开发人员把自己开发的模块的代码都上传到github上(充当一个远程仓库,类似

    2022年4月8日
    120
  • 【Chrome必备插件,一键提升10倍效率】新用户永久免广告,好用!

    经过程序猿哥哥们马不停蹄的疯狂开发CSDNChrome插件终于又双叒叕更新啦快看看这次带来了什么神仙功能助你的开发速度起飞就现在快去戳下方下载体验一下吧~下载官网下载官网下载官网(悄咪咪的告诉大家!文末送大奖噢!快去参加吧~这次我们对小伙伴们反映比较多的新标签页做了重大更新,更新完成后的界面是这个样子的!在这里可以自行添加喜欢的搜索入口噢~还可以定制个性化的桌面快捷图标同时壁纸也是可以更换哒之前咱们介绍的插件的功能大家还记得嘛?小搜搜再来带大家温习一遍咱们的插件功能~新

    2022年4月8日
    42
  • 测试报告范文_性能测试报告分析

    测试报告范文_性能测试报告分析前言受益于pytest的集成,HttpRunnerv3.x可以使用pytest所有插件,包括pytest-html和allure-pytest,也可以实现这2种方式的报告内置html报告pyt

    2022年7月30日
    5
  • Android 实现个性的ViewPager切换动画 实战PageTransformer(兼容Android3.0以下)

    Android 实现个性的ViewPager切换动画 实战PageTransformer(兼容Android3.0以下)转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40411921,本文出自:【张鸿洋的博客】1、概述之前写过一篇博文:Android自定义ViewPager打造千变万化的图片切换效果。有兄弟提出,ViewPager自带了一个setPageTransformer用于设置切换动画~本篇博文,将:1、介绍如何使用setPageTr

    2022年7月22日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号