Linux信号机制详解
1. 信号概述
信号是一种软件中断,用于处理异步事件。这些事件的来源有两种,一种是系统外部,比如用户通过按下Ctrl - C产生中断字符;另一种是程序或内核内部活动,例如进程执行了除以零的代码。作为一种原始的进程间通信(IPC)形式,一个进程也可以向另一个进程发送信号。
关键在于,这些事件不仅是异步发生的(用户可以在程序执行的任何时刻按下Ctrl - C),而且程序也是异步处理信号的。信号处理函数会向内核注册,当信号送达时,内核会从程序的其他部分异步调用这些函数。
信号从早期的Unix系统就已存在,随着时间推移不断发展。在可靠性方面,早期信号可能会丢失,现在有了改进;在功能方面,现在信号可以携带用户定义的负载。最初,不同的Unix系统对信号做了不兼容的更改,后来POSIX对信号处理进行了标准化,Linux遵循这一标准。
大多数非平凡的应用程序都会与信号交互。即使你有意设计应用程序不依赖信号进行通信,在某些情况下(如处理程序终止),仍需处理信号。
2. 信号概念
2.1 信号生命周期
信号有精确的生命周期:
1.信号产生:也称为发送或生成。
2.信号存储:内核将信号保存,直到能够送达。
3.信号处理:内核会根据进程的要求采取以下三种操作之一:
-忽略信号:不采取任何行动。但有两个信号不能被忽略,即 <