• sigaction函数一


    试验 struct sigaction 的 mask ,让他做到 在处理SIGUSR信号的时候,堵塞 SIGINT 和
           SIGUSR2 信号(这两两个信号都是从fork出的子进程中发出来的)

    #include "public.h"

    void myaction(int sig,siginfo_t *info,void *reverse)
    {
     int i=0;
     while (i<5)
     {
      /*printf("i = %d  sig=%d\n",i,sig);
      printf("recive value=%d\n",info->si_value.sival_int);
      printf("info->si_int=%d\n",info->si_int);
      printf("info->si_pid=%d\n",info->si_pid);
      */
      printf("myaction %d\n",i);
      sleep(1);
      i++;
     }
    }
    void myaction1(int sig,siginfo_t *info,void *reverse)
    {
     for (int i=0;i<5;i++)
     {
      printf("myaction1 = %d\n",i);
      sleep(1);
     }
    }

    void myaction2(int sig,siginfo_t *info,void *reverse)
    {
     for (int i=0;i<5;i++)
     {
      printf("myaction2 = %d\n",i);
      sleep(1);
     }
    }


    int main()
    {
     int num=0;
     pid_t pid;
     
     //在这里写信号
     union sigval sival_data;
     struct sigaction action;
     action.sa_sigaction=myaction;
     action.sa_flags=SA_SIGINFO|SA_RESTART;
     sigemptyset(&action.sa_mask);
     sigaddset(&action.sa_mask,SIGUSR2);
     sigaddset(&action.sa_mask,SIGINT);
     sigaction(SIGUSR1,&action,NULL);
     
     action.sa_sigaction=myaction1;
     action.sa_flags=SA_SIGINFO|SA_RESTART;
     sigaction(SIGUSR2,&action,NULL);

     action.sa_sigaction=myaction2;
     action.sa_flags=SA_SIGINFO|SA_RESTART;
     sigaction(SIGINT,&action,NULL);
     sigqueue(getpid(),SIGUSR1,sival_data);
     pid=fork();
     if (pid==-1)
     {
      perror("fork fail\n");
      exit(1);
     }
     if (pid>0)
     {
      //父进程负责创建子进程,新建的进程会从上一个逻辑层开始
      if (num<2)
      {
       pid=fork();
       num++;
      }
     }
     else if (pid ==0)
     {
      
      if (num==0)
      {
       sival_data.sival_int=num;
       sigqueue(getpid(),SIGUSR2,sival_data);
      }
      if (num==1)
      {
       sival_data.sival_int=num;
       sigqueue(getpid(),SIGINT,sival_data);
      }
     }

     return 0;
    }

  • 相关阅读:
    iOS的几种动画使用
    iOS工程师必备技能
    网络数据的下载(NSUrlconnection异步下载和NSstring同步下载)和UI界面数据的刷新(都是抛弃第三方库的一些本质)
    GCD定时器
    iOS开发的小技巧
    站在巨人的肩膀上
    跳转系统设置相关界面的方法
    微信分享
    网站 、内容
    加水印
  • 原文地址:https://www.cnblogs.com/newlist/p/2261628.html
Copyright © 2020-2023  润新知