`
rocky2com
  • 浏览: 40936 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Linux信号介绍(转)

 
阅读更多

信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。在Linux系统中,根据POSIX标准扩展以后的信号机制,不权可以用来通知某进程发生了什么事件,还可以给进程传递数据。
一、信号的来源
信号的来源可以有很多种方式,按照产生条件的不同可以分为硬件和软件两种方式。
1、硬件方式
当用户在终端上按下某些键时,将产生信号。如按下<ctrl+C>组合键后将产生一个SIGINT信号。
硬件异常产生信号:除数为0、无效的存储访问等。这些事件通常由硬件(如CPU)检测到,并将其通知给Linux操作系统内核,然后内核生成相应的信号,并把信号发送给该事件发生时正在运行的程序。
2、软件方式
用户在终端下调用kill命令向进程发送任意信号。
进程调用kill或sigqueue函数发送信号。
当检测到某种软件条件已经具备时发出信号,如由alarm或settimer设置的定时器超时时将生成SIGALRM信号。
二、信号的种类
在Shell下输入kill -l可显示Linux系统支持的全部信号,下表列出了全部信号:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
信号的值在signal.h中定义,上面这些信号的含义如下:
(1)SIGHUP:当用户退出Shell时,由该Shell启动的所有进程将收到这个信号,默认动作为终止进程。
(2)SIGINT:用户按下<Ctrl+C>组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程。
(3)SIGQUIT:当用户按下<Ctrl+/>组合键时产生该信号,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程并产生core文件。
(4)SIGILL:CPU检测到某进程执行了非法指令。默认动作为终止进程并产生core文件。
(5)SIGTRAP:该信号由断点指令或其他trap指令产生。默认动作为终止进程并产生core文件。
(6)SIGABRT:调用abort函数时产生该信号。默认动作为终止进程并产生core文件。
(7)SIGBUS:非法访问内存地址,包括内存地址对齐(alignment)出错,默认动作为终止进程并产生core文件。
(8)SIGFPE:在发生致命的算术错误时发生。不仅包括浮点运行错误,还包括溢出及除数为0等所有的算术错误。默认动作为终止进程并产生core文件。
(9)SIGKILL:无条件终止进程。本信号不能被忽略、处理和阻塞。默认动作为终止进程。它向系统管理员提供了一种可以杀死任何进程的方法。
(10)SIGUSR1:用户定义的信号,即程序员可以在程序中定义并使用该信号。默认动作为终止进程。
(11)SIGSEGV:指示进程进行了无效的内存访问。默认动作为终止进程并产生core文件。
(12)SIGUSR2:这是另外一个用户定义信号,程序员可以在程序中定义并使用该信号。默认动作为终止进程。
(13)SIGPIPE:Broken pipe:向一个没有读端的管道写数据。默认动作为终止进程。
(14)SIGALRM:定时器超时,超时的时间由系统调用alarm设置。默认动作为终止进程。
(15)SIGTERM:程序结束(terminate)信号,与SIGKILL不同的是,该信号可以被阻塞和处理。通常用来要求程序正常退出。执行Shell命令kill时,缺少产生这个信号。默认动作为终止进程。
(16)SIGCHLD:子程序结束时,父进程会收到这个信号。默认动作为忽略该信号。
(17)SIGCONT:让一个暂停的进程继续执行。
(18)SIGSTOP:停止(stopped)进程的执行。注意它和SIGTERM以及SIGINT的区别:该进程还未结束,只是暂停执行。本信号不能被忽略、处理和阻塞。默认动作为暂停进程。
(19)SIGTSTP:停止进程的动作,但该信号可以被处理和忽略。按下<Ctrl+Z>组合键时发出这个信号。默认动作为暂停进程。
(20)SIGTTIN:当后台进程要从用户终端读数据时,该终端中的所有进程会收到SIGTTIN信号。默认动作为暂停进程。
(21)SIGTTOU:该信号类似于SIGTIN,在后台进程要向终端输出数据时产生。默认动作为暂停进程。
(22)SIGURG:套接字(socket)上有紧急数据时,向当前正在运行的进程发出此信号,报告有紧急数据到达。默认动作为忽略该信号。
(23)SIGXCPU:进程执行时间超过了分配给该进程的CPU时间,系统产生该信号并发送给该进程。默认动作为终止进程。
(24)SIGXFSZ:超过文件最大长度的限制。默认动作yl 终止进程并产生core文件。
(25)SIGVTALRM:虚拟时钟超时时产生该信号。类似于SIGALRM,但是它只计算该进程占用的CPU时间。默认动作为终止进程。
(26)SIGPROF:类似于SIGVTALRM,它不仅包括该进程占用的CPU时间还包括执行系统调用的时间。默认动作为终止进程。
(27)SIGWINCH:窗口大小改变时发出。默认动作为忽略该信号。
(28)SIGIO:此信号向进程指示发出了一个异步IO事件。默认动作为忽略。
(29)SIGPWR:关机。默认动作为终止进程。
(30)SIGSYS:无效的系统调用。默认动作为终止进程并产生core文件。
(31)SIGRTMIN~SIGRTMAX:Linux的实时信号,它们没有固定的含义(或者说可以由用户自由使用)。注意,Linux线程机制使用了前3个实时信号。所有的实时信号的默认动作都是终止进程。
1、可靠信号与不可靠信号
SIGHUP(1号)到SIGSYS(31号)之间的信号都是继承自UNIX系统是不可靠信号。Linux系统根据POSIX标准定义了 SIGRTMIN(33号)与SIGRTMAX(64号)之间的信号,它们都是可靠信号,也称为实时信号。我们注意到Linux下没有16和32号信号。 在Linux系统中,信号的可靠性是指信号是否会丢失,或者说该信号是否支持排队。当导致产生信号的事件发生时,内核就产生一个信号。信号产生后,内核通 常会在进程表中设置某种形式的标志。当内核设置了这个标志,我们就说内核向一个进程递送了一个信号。信号产生(generate)和递送 (delivery)之间的时间间隔,称主信号未决(pending)。
进程可以调用sigpending将信号设置为阻塞,如果为进程产生一个阻塞的信号,而对该信号的动作是捕捉该信号(即不忽略信号),则内核将为该进程的 此信号保持为未决状态,直到该进程对此信号解除阻塞或对此信号的响应更改为忽略。如果在进程解除对某个信号的阻塞之前,这种信号发生了多次,那么如果信号 被递送多次(即信号在未决信号队列里面排队),则称之为可靠信号;只被递送一次的信号称为不可靠信号。
2、信号的优先级:信号实质上是软中断,中断有优先级,信号也有优先级。如果一个进程有多个未决信号,则对于同一个未决的实时信号,内核将按照发送的顺序来递送信号。如果存 在多个未决的实时信号,则值(或者说编号)越小的越先被递送。如果既存在不可靠信号,又存在可靠信号(实时信号),虽然POSIX对这一情况没有明确规 定,但Linux系统和大多数遵循POSIX标准的操作系统一样,将优先递送不可靠信号。
三、进程对信号的响应
当信号发生时,用户可以要求进程以下列3种方式之一对信号做出响应。
捕捉信号。对于要捕捉的信号,可以为其指定信号处理函数,信号发生时该函数自动被调用,在该函数内部实现对该信号的处理。
忽略信号。大多数信号都可使用这种方式进程处理,但是SIGKILL和SIGSTOP这两个信号不能被忽略,同时这两个信号也不能被捕获和阻塞。此外,如果忽略某些由硬件异常产生的信号(如非法存储访问或除以0),则进程的行为是不可预测的。
按照系统默认方式处理。大部分信号的默认操作是终止进程,且所有的实时信号的默认动作都是终止进程。

分享到:
评论

相关推荐

    基于ARM-Linux的旋转编码器接口与驱动程序的设计.pdf

    这个过程涉及到对处理器的GPIO引脚进行配置,以接收和解析来自旋转编码器的信号,通常旋转编码器会产生两个相位相差90度的脉冲,通过比较这两个脉冲的相对顺序可以判断旋转的方向。 接下来,文章描述了如何编写...

    USBCAN-linux说明文档.zip_CAN 文档_can linux_canusb linux_can转串口_linux

    "linux_usb转can"则表示文档将介绍如何配置Linux系统,使用USB端口连接到CAN总线,提供一种方便的硬件接口,使得开发者能够在Linux环境中轻松实现CAN通信。 压缩包内的“USBCAN-linux说明文档.pdf”很可能是主要的...

    Linux线程编程之信号处理

     Linux多线程环境中的信号处理不同于进程的信号处理。一方面线程间信号处理函数的共享性使得信号处理更为复杂,另一方面普通异步信号又可转换为同步方式来简化处理。  本文首先介绍信号处理在进程中和线程间的...

    xr20m1172 SPI转串口芯片linux驱动

    本篇将详细介绍XR20M1172的Linux驱动开发及其相关知识点。 1. SPI总线协议: SPI是一种同步串行接口,由主设备控制数据传输。它通常有四个信号线:时钟(SCLK)、主设备输出从设备输入(MOSI)、主设备输入从设备...

    基于Linux平台信号处理驱动程序设计.pdf

    总结来说,这篇论文详细介绍了如何在Linux环境下设计一个支持PCI总线的信号处理驱动程序,特别是在DDC应用中的实践,涵盖了驱动程序设计的关键技术和具体实现步骤,为相关领域的系统开发提供了参考。

    (转)Linux内核源码及其分析

    第一章介绍了Linux的发展历程,包括GNU和Linux的关系,Linux的开发模式——开源协作,以及Linux内核的主要特征,如模块化设计和高度可移植性。Linux内核版本的演变反映了其不断优化和完善的过程。分析内核源码的意义...

    QT及LINUX操作系统窗口

    在超星格式文档中,可能详细介绍了QT如何在Linux环境下创建和管理窗口,包括窗口的创建、显示、关闭、最大化、最小化等基本操作,以及如何添加控件、设置布局、响应用户事件等方面的知识。文档可能还会涵盖如何使用...

    linux 编程指南 第三版

    网络编程是现代应用开发中必不可少的一部分,Linux编程指南会深入介绍TCP/IP协议族以及如何在Linux环境下实现网络通信。该部分涉及的内容包括套接字编程、网络地址转换、域名解析等,这些都是设计网络服务和客户端...

    Linux进程编程介绍 Linux进程编程介绍.TXT

    ### Linux进程编程介绍 在深入探讨Linux进程编程之前,我们首先需要理解进程的基本概念及其在Linux系统中的作用。本文将详细介绍Linux进程的状态、状态转换、创建与终止等关键概念,并通过具体的实例帮助读者更好地...

    linux网络编程详解.pdf

    - **UNIX/Linux基本结构**:介绍UNIX/Linux的基本架构,包括内核、shell、工具和应用程序等组成部分。 - **输入和输出**: - **UNIX/Linux文件系统简介**:概述文件系统的组织结构和文件管理机制。 - **流和标准I/...

    linux关于进程同步的说明

    #### 四、Linux信号量的具体实现 在Linux中,信号量的数据结构定义在`include/asm/semaphore.h`中,其基本结构如下: ```c struct semaphore { atomic_t count; int sleepers; wait_queue_head_t wait; }; ``` ...

    linux下QT编程键盘键值捕获

    ### Linux 下 QT 编程键盘键值捕获详解 ...本文介绍了如何在Linux环境下使用QT进行GUI应用程序开发时捕获并处理键盘键值。通过以上步骤,你可以轻松地为自己的应用程序添加键盘事件处理功能,提高用户的交互体验。

    Linux Sound Programming

    - **概念介绍**:采样音频是指将连续的模拟音频信号转换成离散的数字信号的过程。 - **关键技术和标准**:在Linux下进行采样音频处理时,主要涉及到的技术包括脉冲编码调制(PCM)、μ律编码、A律编码等;常用的标准...

    基于嵌入式Linux的微波信号发生器键盘设计及驱动实现.pdf

    文章首先介绍了Linux内核中的键盘驱动程序的整体框架结构。Linux内核中的键盘驱动主要负责捕捉硬件产生的键盘事件,将其转化为操作系统可理解的数据格式,并通过中断处理机制传递给用户空间的应用程序。驱动程序需要...

    清华大学Linux操作系统原理与应用

    7.2.3 信号量 156 7.3 并发控制实例 157 7.3.1 内核任务及其并发关系 158 7.3.2 实现机制 158 7.3.3 关键代码解释 162 7.3.4 实现步骤 163 习题7 164 第8章 文件系统 165 8.1 Linux文件系统基础 165 8.1.1 Linux文件...

    深入理解Linux内核(中文第3版)_linux_

    1. **内核结构**:书中首先会介绍Linux内核的基本结构,包括模块化设计、内核启动过程、进程管理和调度、内存管理等。这些基础知识对于理解内核的工作流程至关重要。 2. **进程管理**:Linux内核如何创建、销毁、...

    嵌入式Linux ARM开发课件第九讲

    介绍linux系统目录组织结构 linux 运行基理,系统运行过程 配置裁减编译linux内核 进程属性和状态转换;进程控制与调度;进程相关系统调用,构建守护进程 进程间通信: 进程通信的基本概念,管道、信号、消息队列、...

    基于Linux的温湿度采集系统及QT人机界面的实现.pdf

    该文档介绍了一种基于 Linux 的温湿度采集系统的设计和实现,该系统使用 ARM9 平台、SHT10 温湿度传感器和 Qt/Embedded 软件,实现了温湿度数据的实时采集和显示。系统的总体结构包括核心处理器、数据采集模块、显示...

    LinuxTool, Linux下常用工具及其命令介绍.zip

    以上只是LinuxTool项目中一小部分工具和命令的介绍,实际内容可能更丰富,包括但不限于文件压缩与解压缩、权限管理、脚本编程等方面。通过学习和熟练运用这些工具,可以在Linux环境中更加得心应手。对于开发者而言,...

Global site tag (gtag.js) - Google Analytics