实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的:

aaarticlea/png;base64,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Rou/LM+0ZTCtcYcddli9J8R7yy23bL/1rW9VMVe60pXaJzzhCdX/29/+tt18883br3/96wOZXL/3ve+t8e94xzuqnPe9732q0OvGcvYyXBwInz+C9Je3sdoHPehBLfVb9hq1lJNyQejyi1/8opZxv/32a4vxWtMRd5WrXKWWBTm/+c1valm+8pWvEFXbSzFy2iOPPLJeH3744W0x6lrLAl5lT0mVBe7FUKx+8gV38LIto98jHvGIQb5VYPkj31FIPlxljpIueRKBRKAfAUyYXqOkn31lQ0855ZQ0SlYW8pFyKxtd28997nMD3vJE265fv75eY4R897vfrf4yK9Le7GY3G/Dh2XHHHdu3v/3t7cknn9ze+MY37u38yyxA+8pXvrK9xS1uMccg2UjYClw46MSsCOsLZ8DVsIL/9a9/ffuoRz2qPe2006rhFtM8/vGPb8usxkBsmRlov/a1rw2uMfre9a53tSeccELFIaYtMwQDY6fMNLRlo2tNh8FXZpQGMh7wgAe0xxxzTL0usxXtrW9964303mabbQbG5CDREjxRt25ydIqYoBPl6lKZ6Wipdwd2sIx43O9+9xuk42GFdhXzpS1plNAGy+batswwtRglka/MNLWvec1rBmHko7HT1SmvE4FEYOURmHdPSVFnMHW/+AmYxacwP935pj/hicsEi88tU4yKQBko6vQ39eEm1xvc4AaD5EzB/8///E+9ZmkBon54Q4elikhM419wwQVVzrp162r7YsmH6XbSMm1PHixlPPGJT9wofRlcJl7ntrWoY5+/y8dyi2G6LCFQPgn/OWX5gKWn8847r7n5zW9elxnKjEZTZgia613verJWl7dGLCMYgMdPfvKTuhRDftZDzAMe8ofwI0MqA25TZijq5YUXXliXyJAjkT8y+8gydeMI5+e9h75RZpefON4QknhzywP2WGo65JBDKibw0b7AkDaAXmW2pIaBBWVx6eZ73/teE9sfslkuEwdc5PDWT5m1a4oBU+PQFTxYNmLJjXog32td61qqN5ZLvshTD/xJiUAisDgE5jVKVvqmMj9dOiPImzwWDR47gRie/skjwLo7FOuDzh5jBMKv8QGP9cLgSZxE+Pnnn9+UZYSmPMHWAZvBB4MEYjCCGDzKU2+z5557NuVpvnnoQx9awx0I68WE/mxrw8QZrwuf/q5L2RkwNTbKjFEd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" alt="" />

每个信号都有两个标志位分别表示阻塞和未决,还有一个函数指针表示处理动作。信号产生时,内核在进程控制块中设置该信号的未决标志,直到信号递达才清除该标志。在上图的例子中,

SIGHUP信号未阻塞也未产生过,当它递达时执行默认处理动作。

SIGINT信号产生过,但正在被阻塞,所以暂时不能递达。虽然它的处理动作是忽略,但在没有解除阻塞之前不能忽略这个信号,因为进程仍有机会改变处理动作之后再解除阻塞。

SIGQUIT信号未产生过,一旦产生SIGQUIT信号将被阻塞,它的处理动作是用户自定义函数sighandler。

如果在进程解除对某信号的阻塞之前这种信号产生过多次,将如何处理?POSIX.1允许系统递送该信号一次或多次。Linux是这样实现的:常规信号在递达之前产生多次只计一次,而实时信号在递达之前产生多次可以依次放在一个队列里。本章不讨论实时信号。从上图来看,每个信号只有一个bit的未决标志,非0即1,不记录该信号产生了多少次,阻塞标志也是这样表示的。因此,未决和阻塞标志可以用相同的数据类型sigset_t来存储,sigset_t称为信号集,这个类型可以表示每个信号的“有效”或“无效”状态,在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。下一节将详细介绍信号集的各种操作。阻塞信号集也叫做当前进程的信号屏蔽字(Signal Mask),这里的“屏蔽”应该理解为阻塞而不是忽略。

信号集操作函数

sigset_t类型对于每种信号用一个bit表示“有效”或“无效”状态,至于这个类型内部如何存储这些bit则依赖于系统实现,从使用者的角度是不必关心的,使用者只能调用以下函数来操作sigset_t变量,而不应该对它的内部数据做任何解释,比如用printf直接打印sigset_t变量是没有意义的。

#include <signal.h>

int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signo);
int sigdelset(sigset_t *set, int signo);
int sigismember(const sigset_t *set, intsigno);

函数sigemptyset初始化set所指向的信号集,使其中所有信号的对应bit清零,表示该信号集不包含任何有效信号。函数sigfillset初始化set所指向的信号集,使其中所有信号的对应bit置位,表示该信号集的有效信号包括系统支持的所有信号。注意,在使用sigset_t类型的变量之前,一定要调用sigemptyset或sigfillset做初始化,使信号集处于确定的状态。初始化sigset_t变量之后就可以在调用sigaddset和sigdelset在该信号集中添加或删除某种有效信号。这四个函数都是成功返回0,出错返回-1。sigismember是一个布尔函数,用于判断一个信号集的有效信号中是否包含某种信号,若包含则返回1,不包含则返回0,出错返回-1。

每个进程都有一个用来描述哪些信号递送到进程时将被阻塞的信号集,该信号集中的所有信号在递送到进程后都将被阻塞。下面是与信号阻塞相关的几个函数:

#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset));
int sigpending(sigset_t *set));
int sigsuspend(const sigset_t *mask));

sigprocmask函数

调用函数sigprocmask可以读取或更改进程的信号屏蔽字。

#include <signal.h>

int sigprocmask(int how, const sigset_t*set, sigset_t *oset);返回值:若成功则为0,若出错则为-1

如果oset是非空指针,则读取进程的当前信号屏蔽字通过oset参数传出。如果set是非空指针,则更改进程的信号屏蔽字,参数how指示如何更改。如果oset和set都是非空指针,则先将原来的信号屏蔽字备份到oset里,然后根据set和how参数更改信号屏蔽字。

sigprocmask()函数能够根据参数how来实现对信号集的操作,操作主要有三种:

参数how          进程当前信号集

SIG_BLOCK       在进程当前阻塞信号集中添加set指向信号集中的信号

SIG_UNBLOCK 如果进程阻塞信号集中包含set指向信号集中的信号,则解除对该信号的阻塞

SIG_SETMASK  更新进程阻塞信号集为set指向的信号集

如果调用sigprocmask解除了对当前若干个未决信号的阻塞,则在sigprocmask返回前,至少将其中一个信号递达。

 sigpending函数

#include <signal.h>

int sigpending(sigset_t *set);

sigpending读取当前进程的未决信号集,通过set参数传出。调用成功则返回0,出错则返回-1。

sigsuspend(const sigset_t *mask))用于在接收到某个信号之前,临时用mask替换进程的信号掩码, 并暂停进程执行,直到收到信号为止。sigsuspend 返回后将恢复调用之前的信号掩码。信号处理函数完成后,进程将继续执行。该系统调用始终返回-1,并将errno设置为EINTR。

结构体itimerval:

           struct itimerval {
struct timeval it_interval; /*next value */
struct timeval it_value; /* current value */
};
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};

三参数信号处理函数中第二个参数的说明性描述:

siginfo_t {
    int     si_signo;  /* 信号值,对所有信号有意义*/
    int     si_errno;  /* errno值,对所有信号有意义*/
    int     si_code;   /* 信号产生的原因,对所有信号有意义*/
    pid_t   si_pid;    /* 发送信号的进程ID,对kill(2),实时信号以及SIGCHLD有意义 */
    uid_t   si_uid;    /* 发送信号进程的真实用户ID,对kill(2),实时信号以及SIGCHLD有意义 */
    int     si_status; /* 退出状态,对SIGCHLD有意义*/
    clock_t si_utime;  /* 用户消耗的时间,对SIGCHLD有意义 */
    clock_t si_stime;  /* 内核消耗的时间,对SIGCHLD有意义 */
    sigval_t si_value;  /* 信号值,对所有实时有意义,是一个联合数据结构,

/*可以为一个整数(由si_int标示,也可以为一个指针,由si_ptr标示)*/

    void *  si_addr;   /* 触发fault的内存地址,对SIGILL,SIGFPE,SIGSEGV,SIGBUS信号有意义*/
    int     si_band;   /* 对SIGPOLL信号有意义 */
    int     si_fd;     /* 对SIGPOLL信号有意义 */

}

实际上,除了前三个元素外,其他元素组织在一个联合结构中,在联合数据结构中,又根据不同的信号组织成不同的结构。注释中提到的对某种信号有意义指的是,在该信号的处理函数中可以访问这些域来获得与信号相关的有意义的信息,只不过特定信号只对特定信息感兴趣而已。

下面是一个例子:

#include <signal.h>
#include <stdio.h> void printsigset(const sigset_t *set)
{
inti;
for(i = 1; i < 32; i++)
if(sigismember(set, i) == 1)
putchar('1');
else
putchar('0');
puts("");
} int main(void)
{
sigset_ts, p;
sigemptyset(&s);
sigaddset(&s,SIGINT);
sigprocmask(SIG_BLOCK,&s, NULL);
while(1) {
sigpending(&p);
printsigset(&p);
sleep(1);
}
return0;
}

程序运行时,每秒钟把各信号的未决状态打印一遍,由于我们阻塞了SIGINT信号,按Ctrl-C将会使SIGINT信号处于未决状态,按Ctrl-\仍然可以终止程序,因为SIGQUIT信号没有阻塞。

Linux系统编程(23)——信号的阻塞的更多相关文章

  1. linux系统编程之信号(七)

    今天继续学习信号,主要是学习关于时间和定时器相关的函数的使用,关于这个实际上有很多内容,这里先简要进行说明,等之后再慢慢进行相关深入,也主要是为接下来要做的一个综合linux系统编程的例子做准备,好了 ...

  2. linux系统编程之信号(五):信号集操作函数,信号阻塞与未决

    一,信号集及相关操作函数 信号集被定义为一种数据类型: typedef struct { unsigned long sig[_NSIG_WORDS]: } sigset_t 信号集用来描述信号的集合 ...

  3. linux系统编程之信号(六):信号发送函数sigqueue和信号安装函数sigaction

    一,sigaction() #include <signal.h> int sigaction(int signum,const struct sigaction *act,struct ...

  4. linux系统编程之信号(一):中断与信号

    一,什么是中断? 1.中断的基本概念 中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被 ...

  5. linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

  6. linux系统编程之信号(四)

    今天继续探讨信号相关的东东,话不多说,正入正题: 信号在内核中的表示: 下面用图来进一步描述这种信号从产生到递达之间的状态(信号阻塞与未诀):   那是怎么来决定的呢?下面慢慢来举例分解: 所以,通过 ...

  7. linux系统编程之信号(二)

    经过了漫长的间歇,对于c语言的学习也被中断了很久,现实确实有很多的无耐,计划中的事情总会被打乱,但不管怎样,学习的道路是不能休止的,所以经过了一断温习后现在继续学习C语言,话不多说,进入正题: 信号分 ...

  8. linux系统编程之信号(六)

    今天继续学习信号相关的知识,主要还是学习sigqueue另外信号发送函数,并配合上节学习的sigaction的用法,进入正题: sigqueue函数: sigval联合体: 实际上sigval参数是用 ...

  9. linux系统编程之信号(五)

    今天继续对信号进行学习,开始正入正题: sigaction函数: 安装信号之前我们已经学过一个函数:signal,它最早是在unix上出现的,它是对不可靠信号进行安装的,之后出现了可靠信号和实时信号, ...

  10. linux系统编程之信号(二):信号处理流程(产生、注册、注销、执行)

        对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个阶段: 信号诞生 信号在进程中注册 信号在进程中的注销 信号处理函数执行 1    信号诞生     信号事件 ...

随机推荐

  1. c# 编程添加控件

    Button b = new Button();//创建一个新的按钮 b.Text = "test"; //添加到panel1中 panel1.Controls.Add(b);

  2. 链表的基本操作(Basic Operations on a Linked List)

    链表可以进行如下操作: 创建新链表 增加新元素 遍历链表 打印链表 下面定义了对应以上操作的基本函数. 创建新链表 新链表创建之后里面并没有任何元素,我们要为数据在内存中分配节点,再将节点插入链表.由 ...

  3. Java宝典(四)------Java中也存在内存泄露。

    --Java中会存在内存泄露吗? --如果你想当然的以为Java里有了垃圾回收机制就不会存在内存泄露,那你就错了. Java里也会存在内存泄露! 我们慢慢来分析. 所谓内存泄露就是指一个不再被程序使用 ...

  4. tcp 状态示码 及 三次握手

    TCP的几个状态对于我们分析所起的作用. 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五 ...

  5. Live555 分析(二):服务端

    live555支持单播和组播,我们先分析单播的流媒体服务端,后面分析组播的流媒体服务端. 一.单播的流媒体服务端: // Create the RTSP server: RTSPServer* rts ...

  6. UGUI 快捷键创建UGUI组件

      使用NGUI的时候还有xxx快捷键创建, spirte,label,button等等. 在UGUI里面的时候好像是没有快捷键的. 不知道以后多久才能有这个功能.  在家里闲无聊的时候写了一个脚本, ...

  7. GCD 倒计时

    今天在Code4App上看了一个GCD倒计时的Demo,觉得不错代码贴出来备用 -(void)startTime{ __block ; //倒计时时间 dispatch_queue_t queue = ...

  8. PHP设计模式笔记一:准备工作 -- Rango韩老师 http://www.imooc.com/learn/236

    一.编程字体选择 1.选择等宽字体 包括Courier New ,Consolas,Source Code Pro(推荐) 2.环境搭建(建议easyPHP) 二.开发符合PSR规范的基础框架 PSR ...

  9. java匿名内部类,多态,接口练习

    1多态以及接口调用方法: public class Interface { public static void main(String[] args) { Al x = new Al(); jian ...

  10. c# 委托delegate 编写计算器

    .Net 中的委托类似于 C 或 C++ 中的函数指针.使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与 C 或 ...