zoukankan      html  css  js  c++  java
  • [Linux]关于sigprocmask函数的讨论

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #include <unistd.h>
     5 #include <signal.h>
     6 #include <assert.h>
     7 
     8 void printSignal()
     9 {
    10     sigset_t set;
    11     int ret = 0;
    12     sigemptyset(&set);
    13     ret = sigpending(&set);    
    14     int i = 1;
    15     for (i = 1; i < 65; i++)
    16     {
    17         if (0 == (ret = sigismember(&set, i)))
    18         {
    19             printf("0");
    20         }
    21         else if (1 == ret)
    22         {
    23             printf("1");
    24         }
    25     }
    26     puts("");
    27 }
    28 
    29 void my_sigaction (int num, siginfo_t *st, void *dat)
    30 {
    31     int ret = 0;
    32     if (SIGINT == num)
    33     {
    34         sigset_t set;
    35         sigemptyset(&set);
    36         ret = sigaddset(&set, SIGQUIT);
    37         assert(-1 != ret);
    38         ret = sigprocmask(SIG_UNBLOCK, &set, NULL);
    39         assert(-1 != ret);
    40         printf("my_sigaction
    ");
    41         printSignal();
    42         printf("func myhandler num = %d
    ", num);        
    43     }
    44     else
    45     {
    46         printf("signal is  no SIGQUIT
    ");
    47     }
    48 }
    49 
    50 
    51 
    52 int main(void)
    53 {
    54     int ret = 0;
    55     
    56     /* 阻塞信号  */
    57     sigset_t set;
    58     sigemptyset(&set);
    59     ret = sigaddset(&set, SIGQUIT);
    60     assert(-1 != ret);
    61     ret = sigprocmask(SIG_BLOCK, &set, NULL);
    62     assert(-1 != ret);
    63     printf("阻塞信号
    ");
    64     //printSignal();
    65     sigemptyset(&set);
    66     /* 
    67 sigpending 是从未决状态字中读取的, 但是未决信号并不能立即得到block的同步
    68 也就是说在block置1时pending并不能够立即的更新为1 
    69 */
    70     //sigpending(&set);
    71     
    72     /* 注册信号 */
    73     struct sigaction act;
    74     act.sa_sigaction = my_sigaction;
    75     ret = sigemptyset(&(act.sa_mask));
    76     assert(-1 != ret);
    77     ret = sigaction(SIGINT, &act, NULL);
    78     assert(-1 != ret);
    79     printf("注册信号
    ");
    80     printSignal();
    81     
    82     while (1)
    83     {
    84         printSignal();
    85         sleep(1);
    86     }
    87     return 0;
    88 }
  • 相关阅读:
    深入分析Redis的主从复制机制
    Arctan的快速近似算法
    德布鲁因序列与indexing 1
    损失函数是学习的指挥棒—记一次实践经历
    二叉树的遍历回顾
    从卷积拆分和分组的角度看CNN模型的演化
    Inception系列回顾
    通俗易懂DenseNet
    ResNet详解与分析
    理解numpy中ndarray的内存布局和设计哲学
  • 原文地址:https://www.cnblogs.com/bangiao/p/6498270.html
Copyright © 2011-2022 走看看