2003年第 3期 通信与广播电视 3l
Linux系统信号处理方法的应用
王玉华 查朝云 李存虎
摘 要
本文主要对Linux系统中的信号处理方法进行了描述,举例说明了信号处理在
站控软件中的应用。
关键词:进程 信号处理 站控软件
Application of si al Processing Technique in Linux System
W ang Yu·-Hua Zha Chao·-Yun Li Curl·-Hu
Abstract
This paper describes mainly the signal processing technique in Linux system, and
shows its application in station—controlled software.
Key words:proces sign al processing station—controled software
一
、 概 述
Linux是一个多系统、多平台、运行在个人计算机和工作站上的Unix操作系统。由于它
有支持多文件系统,网络功能强大,支持 TCP/IP协议等优点,所以我们开发站控 (站内监
控)软件也选择了Linux操作系统。Linux系统中的进程是一个程序的执行,它是一个动态
的概念,只有进程才能被调度至 CPU运行。在我们编写的网络程序中,为了使进程能在同
一 项任务上协调工作,让它们彼此之间必须能够通信,我们常使用信号处理。信号是一种软
中断,它提供了一种通知进程某个事件发生的机制,是 Linux中进程问同步和通信的工具,
它让一个进程被另一个进程 (或内核)异步地中断处理某个事件,处理结束后,被中断的
进程从中断点重新执行,并且进程在它的执行期间的任何时刻均可能收到信号。
二、信 号 处 理 的 方 法
在一个信号的生命过程中有两个阶段:生成和传送。当导致信号的某些事件发生时,如
果需要通知某个进程,内核就会产生一个信号,系统将它传送给进程。进程可以通过屏蔽来
阻塞信号的传递。如果一个被阻塞的信号产生了,而且对信号的处理不是忽略,则信号会一
直悬挂到解除阻塞或者信号处理函数被设成忽略。在信号产生和对它们进行处理之间,信号
被 “挂起”(pending)。系统在信号的产生之后传递之前允许改变它的处理函数,当该进程
发现信号到来阻塞解除后,就执行信号处理函数。在信号处理函数中,可以使用定时器函数
维普资讯 http://www.cqvip.com
32 通信与广播电视 2003年第3期
(alarm),非局部跳转函数 (sigsetjmp和siglongjmp)等处理某些事情。信号必须有其目的进
程,即它必须被发送给一个进程。Linux系统中定义了一系列的信号,这些信号可以由系统
内核产生 ,也可由系统中其它进程产生 ,只要这些进程有足够的权限。可以用 函数 kil产生
信号。信号定义在文{~:/usr/include/bits/signum.h中。下面举例介绍一些信号:
信号名 说明 默认动作
SIGHUP 终端挂断 Exit
SIGINT 用户中断 () Exit
SIGQUIT 用户退出 () Abort
SIGABRT 异常终止 Abort
SIGBUS 总线错误 Abort
SIGKILL 不能被忽略的终止进程信号 Exit
SIGUSRl 用户自定义信号 Exit
SICSEGV 段失效,存储器访问越界 Abort