博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[学习笔记]可靠信号、不可靠信号
阅读量:4319 次
发布时间:2019-06-06

本文共 1099 字,大约阅读时间需要 3 分钟。

不可靠信号PK可靠信号

q  linux信号机制基本上是从unix系统中继承过来的。早期unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是:

q  进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。

q  早期unix下的不可靠信号主要指的是进程可能对信号做出错误的反应以及信号可能丢失。

q  linux支持不可靠信号,但是对不可靠信号机制做了改进:在调用完信号处理函数后,不必重新调用该信号的安装函数(信号安装函数是在可靠机制上的实现)。因此,linux下的不可靠信号问题主要指的是信号可能丢失。

 

总结:unix信号机制不可靠地方,1)处理完信号以后,需要重新再注册信号;2)信号可能丢失。linux下已经对1做了优化。

 

可靠信号

q  随着时间的发展,实践证明,有必要对信号的原始机制加以改进和扩充。所以,后来出现的各种unix版本分别在这方面进行了研究,力图实现"可靠信号"。由于原来定义的信号已有许多应用,不好再做改动,最终只好又新增加了一些信号,并在一开始就把它们定义为可靠信号,这些信号支持排队,不会丢失。同 时,信号的发送和安装也出现了新版本:信号发送函数sigqueue()及信号安装函数sigaction()。

 

总结:sigaction和signal函数,都是调用内核服务do_signal函数;

内核服务函数(应用系统无法调用的函数)

实时信号(都是可靠信号)和非实时信号(不可靠信号)

q  早期Unix系统只定义了32种信号,Ret hat7.2支持64种信号,编号0-63(SIGRTMIN=31,SIGRTMAX=63),将来可能进一步增加,这需要得到内核的支持。前32种信号已经有了预定义值,每个信号有了确定的用途及含义,并且每种信号都有各自的缺省动作。如按键盘的CTRL+C时,会产生SIGINT信号,对该信号的默认反应就是进程终止。后32个信号表示实时信号,等同于前面阐述的可靠信号。这保证了发送的多个实时信号都被接收。实时信号是POSIX标准的一部分,可用于应用进程。

q  非实时信号都不支持排队,都是不可靠信号;实时信号都支持排队,都是可靠信号。

实时信号和非实时信号

       Man 7 signal 查看手册

非实时信号都不支持排队,都是不可靠信号;实时信号都支持排队,都是可靠信号

翻译结果
 

转载于:https://www.cnblogs.com/shichuan/p/4448030.html

你可能感兴趣的文章
Problem Best Time to Buy and Sell Stock I
查看>>
LeetCode(79): 单词搜索
查看>>
PHP7三元运算符 ?? 和 ?: 的区别
查看>>
解决win7 Windows USB无法驱动/驱动错误/该设备无法启动。(代码10)
查看>>
代理模式
查看>>
form表单发送请求实例
查看>>
微软正式提供Visual Studio 2013正式版下载(附直接链接汇总)
查看>>
symbian系统开发教程(一)
查看>>
SpringBoot配置属性之Server
查看>>
MySQL 8.0 Docker使用注解
查看>>
题解报告:hdu 2093 考试排名
查看>>
U - Relatives(欧拉函数)
查看>>
【原创】Lucene.Net+盘古分词器(详细介绍)
查看>>
【转】EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句
查看>>
xtu summer individual 5 D - Subsequence
查看>>
树状数组
查看>>
java 中的同步机制
查看>>
I学霸官方免费教程八:Java基础之方法(函数)
查看>>
最直观的poi的使用帮助(告诉你怎么使用poi的官网),操作word,excel,ppt
查看>>
php中的页面跳转和重定向
查看>>