zoukankan      html  css  js  c++  java
  • 信号屏蔽字(收集)

    1.一个进程的信号屏蔽字规定了当前阻塞而不能递送给该进程的信号集

    sigemptyset 函数初始化信号集合set,将set 设置为空.

    sigfillset 也初始化信号集合,只是将信号集合设置为所有信号的集合.

    sigaddset 将信号signo 加入到信号集合之中,sigdelset 将信号从信号集合中删除.

    sigdelset用来将参数signum代表的信号从参数set信号集里删除

    sigismember 查询信号是否在信号集合之中.s

    sigprocmask 是最为关键的一个函数.在使用之前要先设置好信号集合set.这个函数的作用是将指定的信号集合set 加入到进程的信号阻塞集合之中去,如果提供了oset 那么当前的进程信号阻塞集合将会保存在oset 里面.参数how 决定函数的操作方式:
    SIG_BLOCK:增加一个信号集合到当前进程的阻塞集合之中.
    SIG_UNBLOCK:从当前的阻塞集合之中删除一个信号集合.
    SIG_SETMASK:将当前的信号集合设置为信号阻塞集合.

    2.Test code from net.

    #include <stdio.h>  
    #include <signal.h>  
    
    void checkset();  
      
    int main(int argc, char* argv[])  
    {  
         sigset_t blockset;  
         sigemptyset(&blockset);  
         sigaddset(&blockset,SIGINT);  
         sigaddset(&blockset,SIGTSTP);  
        printf("first check 
    ");
         checkset();  
    sigprocmask(SIG_SETMASK,
    &blockset,NULL);    printf("second check "); checkset(); sigaddset(&blockset,SIGTERM); sigprocmask(SIG_BLOCK,&blockset,NULL);    printf("third check "); checkset(); sigdelset(&blockset,SIGTERM); sigprocmask(SIG_UNBLOCK,&blockset,NULL);    printf("forth check "); checkset(); return 0; } void checkset() { sigset_t set; printf("checksetstart: "); if(sigprocmask(0,NULL,&set)<0) { printf("checksetsigprocmask error!! "); exit(0); } if(sigismember(&set,SIGINT)) printf("sigint "); if(sigismember(&set,SIGTSTP)) printf("sigtstp "); if(sigismember(&set,SIGTERM)) printf("sigterm "); printf("checksetend "); }

    测试输出

    [root@localhost test]# ./signal
    first check 
    checksetstart:
    checksetend
    second check 
    checksetstart:
    sigint
    sigtstp
    checksetend
    third check 
    checksetstart:
    sigint
    sigtstp
    sigterm
    checksetend
    forth check 
    checksetstart:
    sigterm
    checksetend
    

    上面sigprocmask(SIG_UNBLOCK,
    &blockset,NULL); 时,当前进程的信号屏蔽字{SIGINT,SIGTSTP,SIGTERM}
    blockset 里存储了信号屏蔽字{SIGINT,SIGTSTP}。 调用之后 当前进程的信号屏蔽字为{SIGTERM}。

      

     http://www.gnu.org/software/libc/manual/html_node/Signal-Sets.html#Signal-Sets

    http://www.gnu.org/software/libc/manual/html_node/Blocking-Signals.html#Blocking-Signals

  • 相关阅读:
    【洛谷P3746】组合数问题
    jenkins部署docker
    ansible部署java及数据库环境
    UiPath从入门到精通视频教程
    jenkins安装配置及发布
    搭建uipath
    iostat、vmstat、iftop命令详解
    zabbix通过invoke调用监控服务可用性
    yearning_sql审核平台搭建
    vim操作
  • 原文地址:https://www.cnblogs.com/iclk/p/3683050.html
Copyright © 2011-2022 走看看