Linux?信号signal处理机制_中国网管家族

来源:百度文库 编辑:神马文学网 时间:2024/04/25 06:20:50

中国网管家族

  • 会员中心
  • TAG标签
  • 网站地图
  • RSS订阅
  • 论坛
  • 下载
  • 新闻
  • windows
  • linux
  • cisco
  • 学院
  • 网络
  • 数据库
  • 编程
  • 黑客
  • 认证
  • 服务器
  • 设备
  • 存储
  • 网吧

搜索

热门标签

  • MAX彩贴机CPM-100HC
  • CASIO标签色带|卡西欧标签色带|
  • BS-S111|MAX彩贴印字机
  • 贪污
  • 站长
  • 发动
  • 汶川
  • 搜狗
  • 新手入门
  • 系统管理
  • 网络管理
  • Linux数据库
  • Linux编程
  • 其它unix
返回首页 当前位置: 首页 > linux > 系统管理 >

Linux 信号signal处理机制

时间:2007-08-31 08:00来源: 中国IT实验室收 作者: 佚名 点击:1477次        信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。         信号机制是进程
  

        信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。

        信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。

        一、信号的基本概念

        本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本概念对于理解和使用信号,对于理解信号机制都特别重要。下面就来看看什么是信号。

        1、基本概念

        软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。

        收 到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类:第一种是类似中断的处理程序,对于需要处理的信号,进程可以指定处理函数,由该函数来处 理。第二种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。第三种方法是,对该信号的处理保留系统的默认值,这种缺省操作,对大部分的信 号的缺省操作是使得进程终止。进程通过系统调用signal来指定进程对某个信号的处理行为。

        在进程表的表项中有一个软中断信号域,该域中每一位对应一个信号,当有信号发送给进程时,对应位置位。由此可以看出,进程对不同的信号可以同时保留,但对于同一个信号,进程并不知道在处理之前来过多少个。

        2、信号的类型

        发出信号的原因很多,这里按发出信号的原因简单分类,以了解各种信号:

        (1) 与进程终止相关的信号。当进程退出,或者子进程终止时,发出这类信号。
        (2) 与进程例外事件相关的信号。如进程越界,或企图写一个只读的内存区域(如程序正文区),或执行一个特权指令及其他各种硬件错误。
        (3) 与在系统调用期间遇到不可恢复条件相关的信号。如执行系统调用exec时,原有资源已经释放,而目前系统资源又已经耗尽。
        (4) 与执行系统调用时遇到非预测错误条件相关的信号。如执行一个并不存在的系统调用。
        (5) 在用户态下的进程发出的信号。如进程调用系统调用kill向其他进程发送信号。
        (6) 与终端交互相关的信号。如用户关闭一个终端,或按下break键等情况。
        (7) 跟踪进程执行的信号。

        Linux支持的信号列表如下。很多信号是与机器的体系结构相关的,首先列出的是POSIX.1中列出的信号:

        信号 值 处理动作 发出信号的原因
        ----------------------------------------------------------------------
        SIGHUP 1 A 终端挂起或者控制进程终止
        SIGINT 2 A 键盘中断(如break键被按下)
        SIGQUIT 3 C 键盘的退出键被按下
        SIGILL 4 C 非法指令
        SIGABRT 6 C 由abort(3)发出的退出指令
        SIGFPE 8 C 浮点异常
        SIGKILL 9 AEF Kill信号
        SIGSEGV 11 C 无效的内存引用
        SIGPIPE 13 A 管道破裂: 写一个没有读端口的管道
        SIGALRM 14 A 由alarm(2)发出的信号
        SIGTERM 15 A 终止信号
        SIGUSR1 30,10,16 A 用户自定义信号1
        SIGUSR2 31,12,17 A 用户自定义信号2
        SIGCHLD 20,17,18 B 子进程结束信号
        SIGCONT 19,18,25 进程继续(曾被停止的进程)
        SIGSTOP 17,19,23 DEF 终止进程
        SIGTSTP 18,20,24 D 控制终端(tty)上按下停止键
        SIGTTIN 21,21,26 D 后台进程企图从控制终端读
        SIGTTOU 22,22,27 D 后台进程企图从控制终端写

        下面的信号没在POSIX.1中列出,而在SUSv2列出

        信号 值 处理动作 发出信号的原因
        --------------------------------------------------------------------
        SIGBUS 10,7,10 C 总线错误(错误的内存访问)
        SIGPOLL A Sys V定义的Pollable事件,与SIGIO同义
        SIGPROF 27,27,29 A Profiling定时器到
        SIGSYS 12,-,12 C 无效的系统调用 (SVID)
        SIGTRAP 5 C 跟踪/断点捕获
        SIGURG 16,23,21 B Socket出现紧急条件(4.2 BSD)
        SIGVTALRM 26,26,28 A 实际时间报警时钟信号(4.2 BSD)
        SIGXCPU 24,24,30 C 超出设定的CPU时间限制(4.2 BSD)
        SIGXFSZ 25,25,31 C 超出设定的文件大小限制(4.2 BSD)

        (对于SIGSYS,SIGXCPU,SIGXFSZ,以及某些机器体系结构下的SIGBUS,Linux缺省的动作是A (terminate),SUSv2 是C (terminate and dump core))。

        下面是其它的一些信号

        信号 值 处理动作 发出信号的原因
        ----------------------------------------------------------------------
        SIGIOT 6 C IO捕获指令,与SIGABRT同义
        SIGEMT 7,-,7
        SIGSTKFLT -,16,- A 协处理器堆栈错误
        SIGIO 23,29,22 A 某I/O操作现在可以进行了(4.2 BSD)
        SIGCLD -,-,18 A 与SIGCHLD同义
        SIGPWR 29,30,19 A 电源故障(System V)
        SIGINFO 29,-,- A 与SIGPWR同义
        SIGLOST -,-,- A 文件锁丢失
        SIGWINCH 28,28,20 B 窗口大小改变(4.3 BSD, Sun)
        SIGUNUSED -,31,- A 未使用的信号(will be SIGSYS)

        (在这里,- 表示信号没有实现;有三个值给出的含义为,第一个值通常在Alpha和Sparc上有效,中间的值对应i386和ppc以及sh,最后一个值对应mips。信号29在Alpha上为SIGINFO / SIGPWR ,在Sparc上为SIGLOST。)

        处理动作一项中的字母含义如下
        A 缺省的动作是终止进程
        B 缺省的动作是忽略此信号
        C 缺省的动作是终止进程并进行内核映像转储(dump core)
        D 缺省的动作是停止进程
        E 信号不能被捕获
        F 信号不能被忽略

        上 面介绍的信号是常见系统所支持的。以表格的形式介绍了各种信号的名称、作用及其在默认情况下的处理动作。各种默认处理动作的含义是:终止程序是指进程退 出;忽略该信号是将该信号丢弃,不做处理;停止程序是指程序挂起,进入停止状况以后还能重新进行下去,一般是在调试的过程中(例如ptrace系统调 用);内核映像转储是指将进程数据在内存的映像和进程在内核结构中存储的部分内容以一定格式转储到文件系统,并且进程退出执行,这样做的好处是为程序员提 供了方便,使得他们可以得到进程当时执行时的数据值,允许他们确定转储的原因,并且可以调试他们的程序。

        注意 信号SIGKILL和SIGSTOP既不能被捕捉,也不能被忽略。信号SIGIOT与SIGABRT是一个信号。可以看出,同一个信号在不同的系统中值可能不一样,所以建议最好使用为信号定义的名字,而不要直接使用信号的值。

 


顶一下(0)0%踩一下(0)0%------分隔线----------------------------
  • 上一篇:Linux嵌入应用:ARM体系结构的技术特征
  • 下一篇:Linux的操作系统I2C驱动架构解说
  • 收藏
  • 挑错
  • 推荐
  • 打印
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。 评价: 表情:
用户名: 密码: 验证码:
更多精彩内容
推荐内容
  • 实用技巧:让Linux系统有效防御ARP攻击

    管理员用户登录,打开终端输入 1、#arp -a > /etc/ethers 将ip和mac地址导入et...

  • 在SUSE Linux系统下安装ADSL上网拨号程序

    用过ADSL的人都知道,在WINDOWS上有一个叫WinPPoE的软件,通过这个软件可以很容易地联...

  • Linux操作系统 终端代理的设置方法介绍

      假如校园网内的代理服务器为 192.168.0.1:3128,那么在终端设置代理设置,在文...

  • Linux安装不求人无需分割硬盘玩Ubuntu

     作者: 侯忠 原创  安装Linux对新手来说有点恐怖:分割区和一些主要的东西与Win...

  • skyeye编译问题及解决方法

      首先交代一下我的环境,ubuntu linux 7.04桌面版,gcc 4.1.2, skyeye 1.2.3。接下...

  • Debian Linux系统下的内核编译详细讲解

      1. 传统方式直接在console中编译官方内核,需要以下软件包  bin86 - 16-bit a...

  • VMware环境下Linux内核编译过程详细解析

      终于可以在vmware中使用新编译的内核调试驱动了,虽然也比较经常在vmware里使用li...

  • Linux 2.6内核的编译步骤及模块动态加载

      本文是基于2.6的内核,也建议各位可以先看一下《Linux内核设计与实现(第二版)》...

  • Linux操作系统中关于负载的定义

      使用uptime或者top命令,都可以看到一个负载的输出,形如load average: 0.00, 0.0...

  • Linux内核升级&补丁安装手册

    第一步:Linux2.4.18升级到2.4.31首先说明下我的环境:三台装有RedHat8(2.4.18-14)...

热点内容
  • 常用命令linux下vi编辑器命令大
  • Linux 信号signal处理机制
  • 自动杀死UNIX僵死的进程
  • Linux下的常用软件列表
  • Linux系统调用列表
  • Windows和Linux程序并存同一桌面
  • 双系统重装Windows后引导Linux的
  • Linux 2.6内核的编译步骤及
  • Linux安装不求人无需分割硬盘玩U
  • 让Ubuntu Linux操作系统开启Teln