码迷,mamicode.com
首页 > 系统相关 > 详细

linux signal

时间:2019-12-26 11:25:47      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:调用   用户   返回   handler   恢复   思路   用户空间   linu   default   

*信号之于进程,很像中断之于cpu.

内核对"进程信号"的支持,是在进程从内核空间返回用户态的前夕:可能是时钟中断,页异常陷入的内核又返回,也可能是原先睡着,现在等到某个资源,重新进入调度队列而返回.

*信号的中断处理代码由用户部署在用户空间,所以进程返回用户空间之前,是先去用户空间执行代码,执行完了,cpu重新回到内核,接着原来的断点返回.

*旧的unix上,对于套嵌信号的防范是:

用户设置了信号,进入信号handler之前,把这个信号的handler恢复到默认,这样就可以防止同一个信号造成用户的handler重入了.也因此linux上signal()的行为是一次性的,需要在handler里再次设置.(感觉这个设计思路不可思议)

但仍旧是不可靠的,内核调用用户的handler之前,把handler重置,但是用户没来的及调用新的signal()函数,这个信号又被触发了.

触发的是default handler,对ctrl-c这样的信号,会导致进程意外的流产(用户频繁的按ctrl-c).

 

后来提供了可靠信号的概念,就是相当于又增添了一个"中断屏蔽寄存器"的数据结构.

linux signal

标签:调用   用户   返回   handler   恢复   思路   用户空间   linu   default   

原文地址:https://www.cnblogs.com/xiang-yin/p/12100839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!