linux signal

Posted 相印

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux signal相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

 

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

以上是关于linux signal的主要内容,如果未能解决你的问题,请参考以下文章

Go+ 信号处理教程(4.27)

linux基础知识都有哪些

Linux汇总一——Linux程序管理,Linux终端,Linux命令格式命令类型及Linux命令帮助

Linux学习导航

Linux 文件/目录管理(初级)

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )