基础知识
(1)信号是比较特殊的IPC(Inter-Process Communication,进程间通信)。
(2)信号是进程产生,由系统转发的。
(3)大部分的信号都是异步的(异步就是进程不知道什么会收到信号,不用为了收到信号去执行相对于的接收信号准备动作。网上查到信号全称为软中断信号,也就是信号的执行方式类似中断,是在软件层次上对中断机制的一种模拟)。
信号的作用
linux中的信号提供一个机制在需要的时候告诉某个进程该怎样做,是一种规定,便于系统操作。
信号分为实时信号和非实时信号
(1)linux系统的前31个信号都有一个特殊的名字对应一个系统的特殊事件,这些信号是从UNIX系统继承下来的,被称为“非实时信号”或“不可靠信号”。
(2)后来的POSIX标准增加了第32-64个的实时信号来弥补非实时信号的缺陷。扩充的信号被称为“可靠信号”或“实时信号”。
名词解释:【POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准。它包括了系统应用程序接口(简称API),以及实时扩展[C语言]。】
为什么前31个信号被称为 “不可靠信号”
(1)进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。
(2)信号可能丢失。 如果在进程对某个信号进行处理时,这个信号发生多次,对后到来的这类信号不排队,那么仅传送该信号一次,即发生了信号丢失。
因此,早期unix下的不可靠信号主要指的是进程可能对信号做出错误的反应以及信号可能丢失。
后来如何解决“不可靠信号”的弊端
- 所以后来的标准新增加的实时信号就是弥补了非实时信号的这些不足。
- 没有对于的系统时间和实时信号对应。
- 实时信号会排队,不会发生相同的信号丢弃。
- 进程会优先响应实现信号并按信号从大到小的顺序执行。
[部分内容摘自]https://blog.csdn.net/u013074465/article/details/45978755