信号的基本概念

部分内容来自这篇文章点击打开链接

一.信号及信号来源

信号:信号机制是Linux系统中最为古老的进程之间通信机制,解决进程在正常运行过程中被中断的问题,导致进程的处理流程会发生变化。

信号的本质:信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。

信号是异步事件:a,不可预见性;b.信号有自己的名称和编号;c.信号和异常处理机制。信号的异步性表现在:比如进程1向进程2发送一个信号,那么进程1不必等待该信号是否向进程2发送成功,也不用等待进程2在接收到信号后给它一个反馈,而是在此过程中进程1可以继续执行其它任务。

信号的来源:硬件来源(比如我们按下了键盘或者其它硬件故障),信号是由硬件驱动程序产生的;

软件来源,最常用发送信号的系统函数是kill,raise,alarm和setitime以及sigqueue函数,软件来源还包括一些非法运算等操作,信号是由内核产生的


二.信号的种类

从两个不同的角度对信号进行分类:(1)与时间的关系上:实时信号与非实时信号;(2)可靠性方面:可靠信号与不可靠信号;

1.实时信号与非实时信号

非实时信号:编号为1~31,每个信号都有了确定的用途及含义,并且每种信号都有各自的缺省动作。比如按下键盘的Ctrl+C时,会产生SIGINT信号,对该信号的默认反应就是进程终止。非实时信号不支持信号排队,信号发送过程中可能会丢失,因此都是不可靠信号。

实时信号:编号为34~64(32和33空缺,没有对应的信号),支持信号排队,发送的多个实时信号都会被接收,都是可靠信号。

2.可靠信号与不可靠信号

不可靠信号:Linux信号机制是从Unix系统中继承过来的。早期的Unix系统中的信号机制比较简单,后来在实践中暴露出一些问题,因此,把那些建立在早期机制上的信号叫做不可靠信号,信号值小于SIGRTMIN的信号都是不可靠信号。

可靠信号:Unix版本定义的信号已有许多应用,不好再做改动,最终只好又增加了一些信号,并在一开始就把它们定义为可靠信号,这些信号支持支持排队,不会丢失。信号值位于SIGRTMIN和SIGRTMAX之间的信号都是可靠信号,可靠信号克服了信号可能丢失的问题Linux在支持新版本的信号安装函数sigation()以及信号发送函数sigqueue()的同时,仍然支持早期的signal()信号安装函数,支持信号发送函数kill()。

注:不要有这样的误解:由sigqueue()发送、sigaction安装的信号就是可靠的。事实上,可靠信号是指后来添加的信号信号值位于SIGRTMIN及SIGRTMAX之间);不可靠信号是信号值小于SIGRTMIN的信号。信号的可靠与不可靠只与信号值有关,与信号的发送及安装函数无关。目前linux中的signal()是通过sigation()函数实现的,因此,即使通过signal()安装的信号,在信号处理函数的结尾也不必再调用一次信号安装函数。同时,由signal()安装的实时信号支持排队,同样不会丢失。

对于目前linux的两个信号安装函数:signal()及sigaction()来说,它们都不能把SIGRTMIN以前的信号变成可靠信号(都不支持排队,仍有可能丢失,仍然是不可靠信号),而且对SIGRTMIN以后的信号都支持排队这两个函数的最大区别在于,经过sigaction安装的信号都能传递信息给信号处理函数(对所有信号这一点都成立),而经过signal安装的信号却不能向信号处理函数传递信息。对于信号发送函数来说也是一样的。

三.信号的特点



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值