首页 > 其他 > 详细

信号屏蔽字(收集)

时间:2014-04-24 16:16:33      阅读:619      评论:0      收藏:0      [点我收藏+]

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.

 

bubuko.com,布布扣
#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 \n");
     checkset();  
sigprocmask(SIG_SETMASK,
&blockset,NULL);    printf("second check \n"); checkset(); sigaddset(&blockset,SIGTERM); sigprocmask(SIG_BLOCK,&blockset,NULL);    printf("third check \n"); checkset(); sigdelset(&blockset,SIGTERM); sigprocmask(SIG_UNBLOCK,&blockset,NULL);    printf("forth check \n"); checkset(); return 0; } void checkset() { sigset_t set; printf("checksetstart:\n"); if(sigprocmask(0,NULL,&set)<0) { printf("checksetsigprocmask error!!\n"); exit(0); } if(sigismember(&set,SIGINT)) printf("sigint\n"); if(sigismember(&set,SIGTSTP)) printf("sigtstp\n"); if(sigismember(&set,SIGTERM)) printf("sigterm\n"); printf("checksetend\n"); }
bubuko.com,布布扣

 

测试输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost test]# ./signal
first check
checksetstart:
checksetend
second check
checksetstart:
sigint
sigtstp
checksetend
third check
checksetstart:
sigint
sigtstp
sigterm
checksetend
forth check
checksetstart:
<span style="color: rgb(255, 0, 0);">sigterm</span>
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

 

信号屏蔽字(收集),布布扣,bubuko.com

信号屏蔽字(收集)

原文:http://www.cnblogs.com/iclk/p/3683050.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!