分为四类:中断,陷阱,故障和终止
最初引入中断是是出于性能上的考虑,处理器发出设备请求后就可以立即返回以处理其他任务,而当设备完成动作后,发送中断信号给处理器,随后处理器就可再回头获取处理结果。后来被用于处理器外部与内部紧急事件的处理、机器故障处理、时间控制等。 如何处理中断见书 P.504。
这是一种有意的异常,其目的在于将控制权转交给内核以完成更高级别的调用。
这通常是由于错误所引起的,所以可能被修正,一般会调度给错误处理程序,如果能够正确的处理并解除故障,则将在完成后重新执行该函数。否则,即没有被正确的处理,则会交给内核中的 abort 例程,他会直接终止出错的程序。
对于不可以恢复的错误,则直接交给 abort 来终止它。
当回收了所有的子进程后,再调用 waitpid 就返回 -1,并设置 errno 为 ECHILD。
每种类型最多只能有一个未处理的信号,所以会存在一个正在处理的信号和待处理信号,随后到达的信号会被简单的丢弃。
注意上文所说的每种类型,实际上信号是用一组线性 Bit 位来实现的,
Set 位向量,用于存储待处理信号。Block 位向量用于阻塞对应的向量。
可以使用 P.533 的函数改变当前阻塞信号的集合。
注意三点。