信号机制

来源:互联网 发布:python编程(第四版) 编辑:程序博客网 时间:2024/05/21 08:38

一.信号的发送过程

      发送阶段:内核发送或者用户调用信号发送函数发送信号时,都是由内核将信号写入到目标进程或线程的信号队列中,即pengding队列;

疑问:处理方式为SIG_IGN忽略会发送吗?  应该不会吧

     递送阶段:内核将信号从pending队列中取出,并处理(包括调用用户自定义处理、SIG_DFL默认处理、SIG_IGN忽略处理),

                       递送的时机是在进程从内核态转到用户态时进行的。处于发送阶段和递送之间状态的信号称作是未决的,进程在信号递送之前,仍可改变对此信号的处理动作。

                      参考:apue 10.8    http://blog.csdn.net/morphad/article/details/9247471

二.不可靠信号和可靠信号

       unix早期的信号,信号处理函数安装后只能用一次,调用下次后需要重新安装,信号不支持排队,在信号被处理之前如果信号发送了多次,只处理一次,不支持信号的屏蔽。

       随着时间的发展,对信号的处理机制进行了改进和扩展,对于新增加的信号采用新的机制,因为已有很多建立在老的信号机制上的代码,为了前向兼容,以前定义的信号(值小于SIGRTMIN)仍然采用老的机制,因此小于SIGRTMIN的信号都是不可靠信号,SIGRTMIN与SIGRTMAX之间的信号都是可靠信号。

      对不可靠信号的处理机制也有了变化,如调用一次信号处理函数后不需要重现安装,支持屏蔽。不可靠信号对应非实时信号,不支持排队,可靠信号对应实时信号支持排队。

      参考:http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html  

http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html

http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html

三.apue中介绍了信号相关的api,以及sigsuspend的应用,system,sleep的代码

四.多线程情况下信号的处理

     内核为每个线程维护未决信号队列,各线程共享信号处理函数,线程可以有自己的屏蔽信号集,信号按规则发往某一个线程。

      参考:http://www.cnblogs.com/clover-toeic/p/4126594.html

             http://www.ibm.com/developerworks/cn/linux/l-cn-signalsec/

       

0 0