2003 年 01 月
文章整理:西部数码--专业提供域名注册、虚拟主机服务
linux信号机制远远比想象的复杂,本文力争用最短的篇幅,对该机制做了深入细致的分析。信号应用实例将在信号(下)中给出。
一、信号及信号来源
信号本质
信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号和处理器收到一个中断请求能够说是相同的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。
信号是进程间通信机制中唯一的异步通信机制,能够看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还能够传递附加信息。
信号来源
信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或其他硬件故障);软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer连同sigqueue函数,软件来源还包括一些非法运算等操作。
二、信号的种类
能够从两个不同的分类角度对信号进行分类:(1)可靠性方面:可靠信号和不可靠信号;(2)和时间的关系上:实时信号和非实时信号。在《Linux环境进程间通信(一):管道及有名管道》的附1中列出了系统所支持的任何信号。
1、可靠信号和不可靠信号
"不可靠信号"
Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,因此,把那些建立在
早期机制上的信号叫做"不可靠信号",信号值小于SIGRTMIN(Red hat
7.2中,SIGRTMIN=32,SIGRTMAX=63)的信号都是不可靠信号。这就是"不可靠信号"的来源。他的主要问题是:
• 进程每次处理信号后,就将对信号的响应配置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户假如不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。
• 信号可能丢失,后面将对此周详阐述。
因此,早期unix下的不可靠信号主要指的是进程可能对信号做出错误的反应连同信号可能丢失。
Linux支持不可靠信号,但是对不可靠信号机制做了改进:在调用完信号处理函数后,不必重新调用该信号的安装函数(信号安装函数是在可靠机制上的实现)。因此,Linux下的不可靠信号问题主要指的是信号可能丢失。
"可靠信号"
随着时间的发展,实践证实了有必要对信号的原始机制加以改进和扩充。所以,后来出现的各种Unix版本分别在这方面进行了研究,力图实现"可靠信
号"。由于原来定义的信号已有许多应用,不好再做改变,最终只好又新增加了一些信号,并在一开始就把他们定义为可靠信号,这些信号支持排队,不会丢失。同
时,信号的发送和安装也出现了新版本:信号发送函数sigqueue()及信号安装函数sigaction()。POSIX.4对可靠信号机制做了标准
化。但是,POSIX只对可靠信号机制应具备的功能连同信号机制的对外接口做了标准化,对信号机制的实现没有作具体的规定。
信号值位于SIGRTMIN和SIGRTMAX之间的信号都是可靠信号,可靠信号克服了信号可能丢失的问题。Linux在支持新版本的信号安装
函数sigation()连同信号发送函数sigqueue()的同时,仍然支持早期的signal()信号安装函数,支持信号发送函数kill()。
注:不要有这样的误解:由sigqueue()发送、sigaction安装的信号就是可靠的。事实上,可靠信号是指后来添加的新信号(信号值
位于SIGRTMIN及SIGRTMAX之间);不可靠信号是信号值小于SIGRTMIN的信号。信号的可靠和不可靠只和信号值有关,和信号的发送及安装
函数无关。现在linux中的signal()是通过sigation()函数实现的,因此,即使通过signal()安装的信号,在信号处理函数的结尾
也不必再调用一次信号安装函数。同时,由signal()安装的实时信号支持排队,同样不会丢失。
对于现在linux的两个信号安装函数:signal()及sigaction()来说,他们都不能把SIGRTMIN以前的信号变成可靠信号
(都不支持排队,仍有可能丢失,仍然是不可靠信号),而且对SIGRTMIN以后的信号都支持排队。这两个函数的最大区别在于,经过sigaction安
装的信号都能传递信息给信号处理函数(对任何信号这一点都成立),而经过signal安装的信号却不能向信号处理函数传递信息。对于信号发送函数来说也是
相同的。
2、实时信号和非实时信号
早期Unix系统只定义了32种信号,Ret
hat7.2支持64种信号,编号0-63(SIGRTMIN=31,SIGRTMAX=63),将来可能进一步增加,这需要得到内核的支持。前32种信
号已有了预定义值,每个信号有了确定的用途及含义,并且每种信号都有各自的缺省动作。如按键盘的CTRL
^C时,会产生SIGINT信号,对该信号的默认反应就是进程终止。后32个信号表示实时信号,等同于前面阐述的可靠信号。这确保了发送的多个实时信号都
被接收。实时信号是POSIX标准的一部分,可用于应用进程。
非实时信号都不支持排队,都是不可靠信号;实时信号都支持排队,都是可靠信号。
三、进程对信号的响应
进程能够通过三种方式来响应一个信号:(1)忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略:SIGKILL及SIGSTOP;
(2)捕获信号。定义信号处理函数,当信号发生时,执行相应的处理函数;(3)执行缺省操作,Linux对每种信号都规定了默认操作,周详情况请参考
[2]连同其他资料。注意,进程对实时信号的缺省反应是进程终止。
Linux究竟采用上述三种方式的哪一个来响应信号,取决于传递给相应API函数的参数。
四、信号的发送
发送信号的主要函数有:kill()、raise()、 sigqueue()、alarm()、setitimer()连同abort()。
1、kill()
#include
#include
int kill(pid_t pid,int signo)
参数pid的值 信号的接收进程
pid>0 进程ID为pid的进程
pid=0 同一个进程组的进程
pid<0 pid!=-1 进程组ID为 -pid的任何进程
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
[转载]Linux的信号机制
来源:互联网
作者:west263.com
时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
热点关注
- 快速学习如何搭建一个赚钱
- 什么是CPA、CPC、CPM、CPO
- 论文:Web安全对策研究
- 新手站长35天自学引路
- 站长资讯网第二版上线
- 网络营销网站功能设计的几
- 女站长的建站理财文章
- 也谈域名备案 -- 撤销已存
- 自己动手做网站 个人站长
- 对第一次做网站的朋友说些
- 传统网站逼得Web2.0没法活
- 被K过的域名如何被百度重
- 如何选择理想IDC服务商十
- 技巧:Vimdiff 使用
- 网络创业经历 靠卖域名来
- 如何提高网站流量之小节
- 王晨昀:个人网站为什么要
- 企业开展网络营销存在的误
- 一个失败者谈地方门户的运
- 域名注册与虚拟主机的选购
- SEO360的搜索引擎优化推广
- 网站运营与网络运营的一字
- 做网站要做出自己的个性—
- 中国网站内容不可逾越的三
- 如何将新网及商务中国的域
- 08年,个人站长赚钱将更加
- 保证能增加RSS订阅量的35
- 企业网站英文版制作几个关
- 龚文祥:互联网运营关键词
- 我的行业垃圾站
- 2008最新申请Google adsen
- 虚拟主机的陷阱
- 网站建设发展的几点中肯建
- 企业如何安全高效使用垃圾
- 计算机文件夹删除不掉怎么
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD



