7.2 信号(signal)

 

尽管大多数进程间通信是计划好的,但同时还需要处理不可预知的通信问题。例如,用户使用文本编辑器要求列出一个大文件的全部内容,但随即他认识到该操作并不重要,这时就需要一种方法来中止编辑器的工作,例如,用户可以通过DEL键作到这点,按DEL键实际上是向编辑器发送一个信号,编辑器收到此信号即停止打印文件的内容。信号还可用来报告硬件捕获到的特定的陷入,如非法指令或浮点运算溢出,超时也是通过信号实现的。

实际上,信号机制是在软件层次上对中断机制的模拟。从概念上讲,一个进程接受到一个信号与一个处理器接受到一个中断请求是一样的。一个进程所接收到的信号可以来自其他进程,可以来自外部事件,也可以来自进程自身。最重要的是,信号和中断都是“异步”的。处理器在执行一段程序时并不需要停下来等待中断的发生,也不知道中断会何时发生。信号也一样,一个进程并不需要通过一个什么样的操作来等待信号的到达,也不知道信号会什么时候到达。