Linux 环境进程间通信(二):信号(下)
作者:郑彦兴 更新时间: 2005-05-06
在信号(上)中,讨论了 linux 信号种类、来源、如何安装一个信号以及对信号集的操作。
本部分则首先讨论从信号的生命周期上认识信号,或者宏观上看似简单的信号机制(进程
收到信号后,作相应的处理,看上去再简单不过了),在微观上究竟是如何实现的,也是
在更深层次上理解信号。接下来还讨论了信号编程的一些注意事项,最后给出了信号编程
的一些实例。
一、信号生命周期
从信号发送到信号处理函数的执行完毕
对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三
个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生;信号在进程中注册完毕;
信号在进程中的注销完毕;信号处理函数执行完毕。相邻两个事件的时间间隔构成信号生
命周期的一个阶段。
下面阐述四个事件的实际意义:
1. 信号"诞生"。信号的诞生指的是触发信号的事件发生(如检测到硬件异常、定时器
超时以及调用信号发送函数 kill()或 sigqueue()等)。
2. 信号在目标进程中"注册";进程的 task_struct 结构中有关于本进程中未决信号的