第十章:信号
您现在的位置: 学网 >> 操作系统 >> Linux >> Linux基础 >> 正文
学网教程

linux:第十章:信号

[ 来源:linux | 作者:linux | 时间:2007-7-20 | 去论坛]


101〓引言
信号是软件中断。很多比较重要的应用程序都需处理信号。信号提供了一种处理异
步事件的方法:终端用户键入中断键,则会通过信号机构停止一道程序.Unix的早期
版本,就已经有信号机构,但是这些系统,例如Version 7所提供的信号模型并不可
靠。信号可能被丢失,而且在执行临界区代码时,进程难于关闭所选择的信号.
4.3BSD和SVR3对信号模型都作了更改,增加了可靠信号机制。但是这两种更改之间并
不兼容。幸运的是POSIX.1对可靠信号例程进行了标准化,这正是本章所说明的.本章
先对信号机制进行综述,并说明每种信号的一般用法。然后分析早期实现的问题。在
分析存在的问题之后再说明解决这些问题的方法,这样有助于加深对改进机制的理解.
本章也包含了很多并非100%正确的实例,这样做的目的是为了对其不定之处进行讨论。

102〓信号的概念
首先,每个信号有一个名字。这些名字都以三个字符SIG开头。例如,SIGABRT是夭折
信号,当进程调用abort函数时产生这种信号。SIGALRM是闹钟信号,当由alarm函数设
置的时间已经超过后产生此信号。Version7有十五种不同的信号;SVR4和4.3BSD两者
都有31种不同的信号。
在头文件<signal.h>中,这些信号都被定义为正整数(信号编号)。没有一个信号其编
号为0.在10.9节中我们将会看到kill函数,对信号编号0有特殊的应用。POSIX.1将此
种信号编号值称为定信号。很多条件可以产生一个信号。
·当用户按某些终端键时,产生信号。在终端上按DELETE键通常产生中断信号(SIGINT).
这是停止一道已失去控制程序的方法。(第十一章中将说明此信号可被映照为终端上
的任一字符)。
·硬件异常产生信号:除数为0,无效的存储访问等等。这些条件通常是由硬件检测到的
并将其通知系统核。然后系统核为该条件发生时正在运行的进程产生适当的信号。
例如,对执行一个无效存储访问的进程产生一个SIGSEGV。
·进程用kill(2)函数可将信号发送给另一个进程或进程组。自然,有些限制:接收信号
进程和发送信号进程的属主必须相同,或发送信号进程的属主必须是超级用户。
·用户可用kill(1)命令将信号发送给其它进程。此程序是kill函数的界面。常用此命令
终止一个失控的后台进程。
·当检测到某种软件条件已经发生,并应将其通知有关进程时也产生信号。例如SIGURG
(在网络连接上传来非规定波特率的数据)、SIGPIPE(在管道的读进程已终止后一个进
程写此管道),以及SIGALRM(进程所设置的闹钟时间已经超时)。
信号是异步事件的经典实例。产生信号的事件对进程而言是在随机时间出现的。进程
不能只是测试一个变量(例如errno)来判别是否发生了一个信号,代之以进程必须告诉系
统核"在此信号发生时,请执行下列操作"。可以要求系统在某个信号出现时按照下列三种
方式中的一种进行操作。
1.忽略此信号。大多数信号都可使用这种方式进行处理,但有两种信号却决不能被忽略。
它们是:SIGKILL和SIGSTOP。这两种信号不能被忽略的原因是:它们向超级用户提供一种
使进程终止(killing)或停止的可靠方法。另外,如果忽略某些由硬件异常产生的信号(例
如非法存储访问或除以0),则进程的行为是末定义的。
2.捕捉信号。为了做到这一点要通知系统核在某种信号发生时,要调用一个用户函数。在
用户函数中,可执行用户希望对这种事件进行的处理。例如,若我们编写一个命令解释器,
当用户用键盘产生中断信号时,我们很可能希望返回到程序的主循环,终止系统正在为该
用户执行的命令。如果捕捉到SIGCHLD信号,则表示子进程已经终止,所以此信号的捕捉
函数可以调用Waitpid以取得该子进程的进程ID以及它的终止状态。又例如,如果进程创
建了临时文件,那么我们可能要为SIGTERM函数编写一个信号捕捉函数以清除临时文件
(kill命令传送的系统默认信号是终止信号。)
3.执行系统默认动作。在图10.1中示出了对每一种信号的系统默认动作。注意,对大多数
信号的系统默认动作是终止该进程。图10.1列出所有信号的名字,哪些系统支持此信号以
及对于信号的系统默认动作。在POSIX.1列。表示要求此种信号。job表示这是作业控制信
号(仅当支持作业控制时,才要求此种信号)。
在系统默认动作列,"终止w/core"表示在进程当前工作目录的Core文件中复制了该进程
的存储图象。

文章整理:学网 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]

学网·特别声明:
本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。本站所有文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题,请联系编辑人员Xababy#Gmail.com,我们尽快予以更正。
设为首页 - 收藏学网 - 关于学网 - RSS订阅 - 版权申明 - 友情链接 - 联系学网 - 网站地图 - 投稿学网
学网·2004-2008版权所有
© CopyRight 2004-2008 WwW.Xue5.CoM.Inc All Rights Reserved
合作、建议、联系::cainiaoo.cn#live.cn QQ:329700200,1103290

学网_致力于提供优质免费的电脑学习教程
陕ICP备05000834号