1.未决和阻塞标志可以用相同的数据类型sigset_t来存储,sigset_t称为信号集,这个类型可以表示每个信号的“有效”或“无效”状态,
在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。
阻塞信号集也叫做当前进程的信号屏蔽字(Signal Mask),这里的“屏蔽”应该理解为阻塞而不是忽略。

2.sigset--装信号的容器
信号能被装进容器吗?能。
为什么需要容器来装信号?其实还是方便 linux 内核处理信号,当然也方便用户程序处理。试想一下,如果同时发送了好多不同的
信号给进程,然而进程一次只能处理一个信号,所以进程得把接收到的信号先保存起来才行。

3. sigset_t
POSIX定义一个数据结构—— sigset_t ,typedef定义的数据类型,一个64位宽度的整数,是一个信号集合。信号的编号是从1到64这个范围。
而sigset_t正好是一个64位整数,所以有时候sigset_t也被称为信号位图。

操作 sigset_t 的函数
操作sigset_t的函数主要有 5 个。
sigemptyset (清空集合,所有比特位置 0)
sigfillset (填充集合,所有比特位置 1)
sigaddset (添加信号到集合,将某一比特位置 1)
sigdelset (删除某个信号,将某一比特位置 0)
sigismember (是否存在某个信号,判断某一比特位是否为 1)

3.1 打印sigset_t的函数
void printsigset(const sigset_t *set)
{
for (int i = 1; i <= 64; i++) {
if (i==33) putchar(' ');
if (sigismember(set, i) == 1)
putchar('1');
else
putchar('0');
}
puts("");
}

3.2 填充sigset_t
sigfillset(&st);
printsigset(&st);
结果:
11111111111111111111111111111110 01111111111111111111111111111111

3.3 清空sigset_t
sigemptyset(&st);
printsigset(&st);
结果:
00000000000000000000000000000000 00000000000000000000000000000000

3.4 添加信号
sigaddset(&st, SIGHUP);
sigaddset(&st, SIGINT);
sigaddset(&st, SIGKILL);
sigaddset(&st, SIGSYS);
sigaddset(&st, SIGRTMIN);
sigaddset(&st, SIGRTMAX);
printsigset(&st);
上面这段代码一共添加了 6 个不同的信号,可以发现信号对应的比特位都被置1了。
结果:
11000000100000000000000000000010 01000000000000000000000000000001

3.5 删除信号
sigdelset(&st, SIGKILL);
printsigset(&st);
这里只删除了信号 9(SIGKILL),发现第 9 个比特位被置 0了。
结果:
11000000000000000000000000000010 01000000000000000000000000000001

3.6 判断集合里是否存在某个信号
if (sigismember(&st, SIGKILL)) {
printf("SIGKILL is member\n");
}
if (sigismember(&st, SIGINT)) {
printf("SIGINT is member\n");
}
结果:因为 SIGKILL 刚刚被删除了,所以这里只打印了 SIGINT.
SIGINT is member

待看:http://blog.csdn.net/zhangxiao93/article/details/52583127

http://blog.csdn.net/anonymalias/article/details/9219945

最新文章

  1. IE10中session失效取不到值的问题
  2. Linux系统常用命令
  3. Mathematica 计算矩阵的伴随矩阵
  4. [转]DCM Tutorial – An Introduction to Orientation Kinematics
  5. 我遇到的CocoaPods的问题(也许后期会解决,持续更新)
  6. sdibt 1244 烦人的幻灯片
  7. OpenJudge计算概论-鸡尾酒疗法
  8. java web 学习一
  9. 通过OAF实现RTF多语言
  10. ContextLoaderListener初始化的前后文和DispatcherServlet初始化的上下文关系
  11. 关于ThinkPHP下使用Uploadify插件 仅有火狐提示HTTP Error (302)错误的解决办法
  12. Qt 圆角矩形+鼠标左键拖动窗口
  13. background:url 的使用方法
  14. linux下安装greenplum
  15. 6 款好用的 PC+Android 同步 GTD 软件
  16. ORA-00245问题总结
  17. ANDROID基础ACTIVITY篇之Activity的生命周期(一)
  18. ubuntu旧版本源失效的处理方法
  19. odoo权限机制
  20. 和我一起学Effective Java之创建和销毁对象

热门文章

  1. git rm删除
  2. zzuli 1726 迷宫 BFS(题意)
  3. How do you add?(递推)
  4. n阶汉诺塔 记住吧。。
  5. Web Service基本概念
  6. IOS UI总结
  7. js数组的方法小结
  8. spring boot 学习(二)spring boot 框架整合 thymeleaf
  9. hadoop kafka import/export data (8)
  10. linux create a process