您的位置:首页 > 运维架构 > Linux

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