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)
上一篇 2022年5月26日 上午7:00
下一篇 2022年5月26日 上午7:00


相关推荐

  • css经典布局——圣杯布局

    圣杯布局和双飞翼布局一直是前端面试的高频考点,圣杯布局的出现是来自由MatthewLevine在2006年写的一篇文章《InSearchoftheHolyGrail》。比起双飞翼布局,它的起源不是源于对页面的形象表达。在西方,圣杯是表达“渴求之物”的意思。而双飞翼布局则是源于淘宝的UED,可以说是灵感来自于页面渲染。效果图原本录制了…

    2022年4月4日
    74
  • 摩尔斯电码对照表—Morse code

    摩尔斯电码对照表—Morse code

    2026年3月18日
    2
  • 解决lefse配置过程中遇到的问题「建议收藏」

    解决lefse配置过程中遇到的问题「建议收藏」记录centos7.5中配置lefse过程中遇到的问题1、下载lefse软件包,解压,查看“requirements.txt”文件,需要的R和python包列表:-R-Rlibraries:splines,stats4,survival,mvtnorm,modeltools,coin,MASS-pythonlibraries:rpy2(v.2.1orh…

    2022年5月13日
    47
  • vuejs — 父组件向子组件传值(父传子)「建议收藏」

    vuejs — 父组件向子组件传值(父传子)「建议收藏」来看一下vue中的父组件向子组件传值的过程:首先,举个例子:有子组件—-A.vueB.vueC.vueA.vue中有一个数组-》listArr,这个数组在B.vue和C.vue中也要用到,每个页面都去写listArr数组,比较麻烦那怎么用简单…

    2022年5月11日
    53
  • 重复字符串 leetcode_无重复字符的最长子串c语言

    重复字符串 leetcode_无重复字符的最长子串c语言原题链接给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,”pwk

    2022年8月9日
    9
  • savefiledialog用法_vba filedialog

    savefiledialog用法_vba filedialog保存文件的控件有两种方式,一种就是保存,二就是另存为,保存很简单,就是在文件已经打开的情况下,在把文件写一遍在使用savefiledialog控件时,用户可以通过vs2015的属性面板设置,也可在代码中设置privatevoidbutton1_Click(objectsender,EventArgse){saveFile…

    2022年10月8日
    4

发表回复

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

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