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

Linux-信号的本质

时间:2017-07-28 01:01:06      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:异步通信   通信   setitimer   lin   style   sigqueue   功能   arch   archive   

信号的概念

  软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的(《中断本质》)。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。 

 

信号处理流程

  对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个阶段:信号诞生、信号在进程中注册、信号的执行和注销

 

信号发生

  信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作。

 

信号在进程中注册

  在进程表的表项中有一个软中断信号域,该域中每一位对应一个信号,当导致产生信号的事件发生时,内核就产生了一个信号。内核给一个进程发送软中断信号的方法,是内核在进程所在的进程表项的信号域设置对应于该信号的位,当内核设置了这个标志,我们就说内核向进程递送了一个信号。如果信号发送给一个正在睡眠的进程,如果进程睡眠在可被中断的优先级上,则唤醒进程;否则仅设置进程表中信号域相应的位,而不唤醒进程。如果发送给一个处于可运行状态的进程,则只置相应的域即可。

 

  收到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类:

    第一种是类似中断的处理程序,对于需要处理的信号,进程可以指定处理函数,由该函数来处理。

    第二种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。

    第三种方法是,对该信号的处理保留系统的默认值,这种缺省操作,对大部分的信号的缺省操作是使得进程终止。进程通过系统调用signal来指定进程对某个信号的处理行为。

 

转自:http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html

Linux-信号的本质

标签:异步通信   通信   setitimer   lin   style   sigqueue   功能   arch   archive   

原文地址:http://www.cnblogs.com/JohnABC/p/7248052.html

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