2015年9月17日星期四

浅谈Linux中的信号机制(二) - 我是一只C++小小鸟

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
浅谈Linux中的信号机制(二) - 我是一只C++小小鸟  阅读原文»

首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇《浅谈Linux中的信号机制(一)》的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉。本人自知功力不够,尚且不能对着Linux内核源码评头论足。以后的路还很长,我还是一步一个脚印的慢慢走着吧,Linux内核这座山,我才刚刚抵达山脚下。

好了,言归正传,我接着昨天写下去。如有错误还请各位看官指正,先此谢过。

上篇末尾,我们看到了这样的现象:send进程总共发送了500次SIGINT信号给rcv进程,但是实际过程中rcv只接受/处理了13次SIGINT的信号处理函数(signal-handler function)。究竟是rcv进程接受了500次SIGINT信号只执行了13次信号处理函数,还是rcv进程只接受了13次SIGINT信号然后执行了13次信号处理函数呢。我们不禁要问:信号去了哪儿呢?要搞清这个问题之前,我们还需了解一个叫做做信号集和信号屏蔽的知识点。

信号集

在处理信号相关的函数时,我们时常需要一种的特殊的数据结构来表示一组信号的集合,这样的集合我们称之为信号集,其数据类型表示为sigset_t,通常是用位掩码的形式来实现的。我的环境是CentOS7,其定义在/usr/include/bits/sigset.h中,具体如下:

/* A `sigset_t' has a bit for each signal. */

# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
unsigned long int __val[_SIGSET_NWORDS];
} __sigset_t;

没有评论:

发表评论