linux信号解释(2)

笔者学识不深,以下内容是网上摘取,以便日后使用。

信号 信号详细描述 简明描述 处理方式
1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。 连接挂断 终止(默认处理)
2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。 终端中断,Ctrl+c产生该信号 终止(terminate)
3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-/)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号 终端退出,Ctrl+|终止+转储
4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。 进程试图执行非法指令 终止+转储
5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用。 进入断点 终止+转储
6) SIGABRT 调用abort函数生成的信号。 进程异常终止,abort()产生 终止+转储
7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。 硬件或对齐错误 终止+转储
8) SIGFPE 在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。 浮点运算异常 终止+转储
9) SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。 不可以被捕获或忽略的终止信号 终止
10) SIGUSR1 留给用户使用 用户定义信号1 终止
11) SIGSEGV 试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据. 无效的内存段访问=>Segmentation error 终止
12) SIGUSR2 留给用户使用 用户定义信号2 终止
13) SIGPIPE 管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。 向读端已关闭的管道写入 终止
14) SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号. 真实定时器到期,alarm()产生 终止
15) SIGTERM 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。 可以被捕获或忽略的终止信号 终止
16) SIGSTKFLT 协处理器堆栈错误 协处理器栈错误 终止
17) SIGCHLD 子进程结束时, 父进程会收到这个信号。 子进程已经停止, 对于管理子进程很有用 忽略
18) SIGCONT 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符 继续执行暂停进程(用户一般不用) 忽略
19) SIGSTOP 停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略. 不能被捕获或忽略的停止信号 停止
20) SIGTSTP 停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号 终端挂起,用户产生停止符(Ctrl+Z) 停止
21) SIGTTIN 当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行. 后台进程读控制终端 停止
22) SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到. 后台进程写控制终端 停止
23) SIGURG 有"紧急"数据或out-of-band数据到达socket时产生. 紧急I/O未处理 忽略
24) SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。 进程资源超限 终止+转储
25) SIGXFSZ 当进程企图扩大文件以至于超过文件大小资源限制。 文件资源超限 终止+转储
26) SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间. 虚拟定时器到期 终止
27) SIGPROF 类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间. 实用定时器到期 终止
28) SIGWINCH 窗口大小改变时发出. 控制终端窗口大小改变 忽略
29) SIGIO 文件描述符准备就绪, 可以开始进行输入/输出操作. 异步I/O事件 终止
30) SIGPWR Power failure 断电 终止
31) SIGSYS 非法的系统调用。 进程试图执行无效系统调用 终止+转储

信号这么多,其实主要记住常用的几个信号就好。

信号 信号说明
SIGINT Ctrl-C终端下产生
SIGABRT 产生SIGABRT信号
SIGALRM 由定时器如alarm()
SIGCHLD 子进程结束后向父进程发送
SIGBUS 总线错误
SIGKILL 必杀信号
SIGPIPE 管道断裂
SIGIO 使用fcntl注册I/O事件
SIGQUIT 在终端下Ctrl-\产生
SIGSEGV 对内存无效的访问导致即常见的“段错误” 终止当前进程
SIGSTOP 必停信号,不能被阻塞,不能被捕捉
SIGTERM 终止进程的标准信号

原文地址:http://blog.51cto.com/lythjq/2074583

时间: 2024-08-01 15:11:46

linux信号解释(2)的相关文章

linux信号解释(4)--C语言下的理解

上一节中中简单介绍了信号的处理机制,就是调用函数库来实现信号的处理,因此,在这节中,介绍在C语言下如何理解信号的处理机制. 创建一个文件signal.c,文件内容如下:(对于学过一下C语言的童鞋来说是不是很熟悉呢) #include<signal.h> //信号函数库 #include<unistd.h> //C和C++语言提供对POSIX #include<stdio.h> //标准的输入输出库 void signalout(int signo) //自定义signa

linux信号解释(3)--信号处理机制

如果需要进程捕获某个信号,并作出相应的处理,就需要注册信号处理函数(其实就是内核里需要识别信号函数,类似C语言里的include某函数库). 处理信号就类似软中断,内核为每个进程准备了一段信号向量表,记录信号的处理机制.当某个信号发生后,内核就会调用注册的函数去处理. 信号何时来,是未知的,因此进程不可能一直等待信号来.信号的接收不是有用户进程来完成,需要内核来代理.当用户进程P2向另一个进程P1发送信号后,内核接收到信号,将信号放置P1进程的信号队里中.当P1进程进入内核态时,会检查信号队列,

linux信号解释(5)--bash下的理解

上一节中用了C语言来理解信号的处理,那么在bash中是如何理解的呢? 首先我们来认识一下trap命令#type trapo_o原来是一个shell的内建命令,大家能想想为何是内建命令吗?sh是人机对话的接口,我们发起的命令都会通过sh与内核进行打交道,那么在当前sh进程内就能及时完成信号的捕捉和处理. 好了我们回到bash中如何理解呢?我们还是用回上一节的实例来做,创建一个signalshell.sh文件,文件内容如下: #!/bin/bash # echo "Process ID is $$&

Linux信号实践(2) --信号分类

信号分类 不可靠信号 Linux信号机制基本上是从UNIX系统中继承过来的.早期UNIX系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: 1.进程每次处理信号后,就将对信号的响应设置为默认动作.在某些情况下,将导致对信号的错误处理:因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号. 2.因此导致, 早期UNIX下的不可靠信号主要指的是进程可能对信号做出错误的反应以及信号可能丢失. Linux支持不可靠信号,但是对不可

Linux信号机制

信号分类 不可靠信号 VS. 可靠信号 Linux信号机制基本上是从UNIX系统中继承过来的.早期UNIX系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: 1.进程每次处理信号后,就将对信号的响应设置为默认动作.在某些情况下,将导致对信号的错误处理:因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号. 2.早期UNIX下的不可靠信号主要指的是进程可能对信号做出错误的反应以及信号可能丢失. Linux支持不可靠信号,但是

linux信号基本概念及如何产生信号

linux信号基本概念及如何产生信号 摘自:https://blog.csdn.net/summy_j/article/details/73199069 2017年06月14日 09:34:21 阅读数:4131 标签: linux信号 更多 个人分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/summy_J/article/details/73199069 阅前须知 本文的主要内容有: 1.信号的基本概念(包括进程对信号的3

Linux信号使用及自定义信号

linux自定义信号:https://www.cnblogs.com/bigben0123/p/3186661.html linux信号.值及解释:https://blog.csdn.net/luotuo44/article/details/16799607 信号处理:https://wiki.jikexueyuan.com/project/cplusplus/signal-handling.html 没什么kill -l没有32 33 http://www.kbase101.com/quest

Linux 信号signal处理机制(ZZ)

http://www.cnblogs.com/taobataoma/archive/2007/08/30/875743.html 信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断.从它的命名可以看出,它的实质和使用很象中断.所以,信号可以说是进程控制的一部分. 一.信号的基本概念 本节先介绍信号的一些基本概念,然后

LINUX 信号概念详解

LINUX 信号概念详解 我们运行如下命令,可看到Linux支持的信号列表: # kill -l 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 17) SIGCHLD 18) SIGCONT 19) SIGSTOP