信号是在软件层次上对中断机制的一种模拟。在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一进程,而无须知道该进程的状态。如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它为止;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。
信号是进程间通信机制中唯一的异步通信机制,可以看做是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过posix实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。
信号事件的发生有两个来源:硬件来源(如我们按下了键盘上的按钮或者出现其他硬件故障);软件来源,常用发送信号的系统函数有kill()、raise()、alarm()、setitimer()和sigqueue()等,软件来源还包括一些非法运算等操作。
进程可以通过3种方式来响应一个信号。
1.忽略信号
忽略信号即对信号不做任何处理,其中,有两个信号不能忽略:sigkill和sigstop。
2.捕捉信号
定义信号处理函数,当信号发生时,执行相应的处理函数。
3.执行默认操作
linux对每种信号都规定了默认操作,如表1所示。
一个完整的信号生命周期可以分为3个重要阶段,这3个阶段由4个重要事件来刻画的:信号产生、信号在进程中注册、信号在进程中注销、执行信号处理函数。这里信号的产生、注册、注销等是指信号的内部实现机制,而不是信号的函数实现。因此,信号注册与否与本节后面讲到的发送信号函数(如kill()等)及信号安装函数(如signal()等)无关,只与信号值有关。
相邻两个事件的时间间隔构成信号生命周期的一个阶段。要注意这里的信号处理有多种方式,一般是由内核完成的,当然也可以由用户进程来完成,故在此没有明确指出。
信号的处理包括信号的发送、捕获及信号的处理,它们有各自相对应的常见函数。
● 发送信号的函数:kill()、raise()。
● 捕捉信号的函数:alarm()、pause()。
● 处理信号的函数:signal()、sigaction()。
贸泽电子开售Analog Devices ADIS16507精密MEMS惯性测量单元
荣耀8xmax对比荣耀note10哪个好
智能眼镜道路曲折,多方势力不离不弃
什么是ttl电平 CMOS电平以及它们的区别
华为与中国联通联合成立了MEC创新业务运营中心
Linux下的信号机制
“水深”的二手车交易,经此一事更显得深不可测
2021年NOR闪存销售额比飙升63%
麒麟820处理器将采用6nm制程工艺制作并支持5G网络
外媒评史上最丑十大科技产品:大哥大上榜
多路输出电源负载交错性能改善
一种嵌入式智能寻迹机器人设计
聚灿光电发布2018年年报 LED外延片及芯片的研发生产及销售成主营业务
国产MCU厂商如何化“危”为“机”?
卢伟冰表示红米K30一定是5G爆品,支持NSA和SA两种组网方式
PCB画原理图的十大注意事项解析
Pick光纤收发器作用
电路设计经典:PCB布局思路分析
恩智浦为五家领先的汽车OEM制造商提供汽车NFC技术,推动安全连接的进步
手把手教你pcb压合的整个流程,小白也能玩转电路板制作