linux signal
*信号之于进程,很像中断之于cpu.
内核对"进程信号"的支持,是在进程从内核空间返回用户态的前夕:可能是时钟中断,页异常陷入的内核又返回,也可能是原先睡着,现在等到某个资源,重新进入调度队列而返回.
*信号的中断处理代码由用户部署在用户空间,所以进程返回用户空间之前,是先去用户空间执行代码,执行完了,cpu重新回到内核,接着原来的断点返回.
*旧的unix上,对于套嵌信号的防范是:
用户设置了信号,进入信号handler之前,把这个信号的handler恢复到默认,这样就可以防止同一个信号造成用户的handler重入了.也因此linux上signal()的行为是一次性的,需要在handler里再次设置.(感觉这个设计思路不可思议)
但仍旧是不可靠的,内核调用用户的handler之前,把handler重置,但是用户没来的及调用新的signal()函数,这个信号又被触发了.
触发的是default handler,对ctrl-c这样的信号,会导致进程意外的流产(用户频繁的按ctrl-c).
后来提供了可靠信号的概念,就是相当于又增添了一个"中断屏蔽寄存器"的数据结构.
相关推荐
pointfish 2020-07-18
PpikachuP 2019-06-21
sunnyJam 2019-10-20
岳英豪 2019-09-07
rually 2019-06-25
鹰之翔 2012-02-18
shipinsky 2017-01-16
hanjinixng00 2017-01-16
networkyang 2014-01-04
PythonGCS 2019-01-09
喝咖啡的IT羊 2007-09-25
PHP100 2019-03-28
pbyanglove 2011-07-14
郭枫 2019-07-01
星际之旅 2019-06-20
aifeng 2016-12-02
逍遥友 2016-12-01
manmanoy 2018-01-25