天天看点

Linux——信号列表

1

SIGHUP

本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。

2

SIGINT

程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。

3

SIGQUIT

和SIGINT类似, 但由QUIT字符(通常是Ctrl-/)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。

4

SIGILL

执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。

5

SIGTRAP

由断点指令或其它trap指令产生. 由debugger使用。

6

SIGABRT

调用abort函数生成的信号。

7

SIGBUS

非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。

8

SIGFPE

在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。

9

SIGKILL

用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。

10

SIGUSR1

留给用户使用

11

SIGSEGV

试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.

12

SIGUSR2

留给用户使用

13

SIGPIPE

管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。

14

SIGALRM

时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.

15

SIGTERM

程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。

16

17

SIGCHLD

子进程结束时, 父进程会收到这个信号。

18

SIGCONT

让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符

19

SIGSTOP

停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.

20

SIGTSTP

停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号

  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 终止信号 网管bitscn_com

        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是一个信号。可以看出,同一个信号在不同的系统中值可能不一样,所以建议最好使用为信号定义的名字,而不要直接使用信号的值。

继续阅读