Linux学习笔记之对信号集的操作
2016-07-12 16:12
309 查看
每个信号都有两个标志位分别表示阻塞(block)和未决(pending),还有⼀个函数指针表示处理动作。
一旦信号被阻塞,信号产生后就会处于未决状态,直到信号阻塞被解除。
对信号的处理就是递达,有三种方式:忽略;执行默认动作;执行自定义动作
所以信号要经历的过程是产生–>未决(被阻塞时)–>递达
系统提供了一系列对信号集操作的函数:
int sigemptyset(sigset_t *set)对信号集清零,表示该信号集不包含任何有效信号。
int sigaddset(sigset_t *set)在该信号集中添加某种有效信号。
int sigismember(const sigset_t *set, int signo)判断该信号集中是否包含某种信号
int sigprocmask(int how, const sigset_t *set ,const sigset *oset)可以读取或更改进程的信号屏蔽字(block表)
int sigpending(sigset_t *set)读取当前进程的未决信号集(pending表),通过set参数传出,set是一个输出型参数
下面是一个测试程序:
添加了SIGINT信号并将其阻塞,每隔一秒打印出pending表,10秒后解除阻塞
程序运行结果:
前三秒信号未产生,第四秒信号产生,处于未决状态,10秒后信号阻塞解除,信号被递达,程序退出。
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍