Linux学习笔记之对信号集的操作

来源:互联网 发布:js判断radio被选中 编辑:程序博客网 时间:2024/05/04 05:30

这里写图片描述
每个信号都有两个标志位分别表示阻塞(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秒后信号阻塞解除,信号被递达,程序退出。

0 0
原创粉丝点击