Linux进程被信号杀死后退出状态码(exit code)的分析

linux系统下,进程对信号的默认响应方式有5种:

1) 忽略信号,即当做没收到信号一样;

2) 终止进程;

3) 产生核心转储文件,同时进程终止;

4) 停止进程,即暂停进程的执行;

5) 于之前的暂停之后恢复执行;

处理方式2和3都会导致进程终止执行并立即退出,处理方式1、4、5不会造成进程终止执行。

因此,可以将信号粗略的分为两类,一类是会导致进程终止并退出的信号;另一类则是不会导致进程终止并退出的信号。

当进程因收到信号被终止执行退出后,父进程可以通过调用wait或waitpid得到它的exit code。

进程被各信号终止的退出状态码总结如下:

信号编号信号名称信号描述默认处理方式Exit code
1SIGHUP挂起终止1
2SIGINT终端中断终止2
3SIGQUIT终端退出终止、core dump131
4SIGILL非法指令终止、core dump132
5SIGTRAP跟踪/断点陷阱终止、core dump133
6SIGABRT终止进程终止、core dump134
7SIGBUSBus error终止、core dump135
8SIGFPE算术异常终止、core dump136
9SIGKILL杀死进程(必杀)终止9
10SIGUSR1用户自定义信号1终止10
11SIGSEGV段错误终止、core dump139
12SIGUSR2用户自定义信号2终止12
13SIGPIPE管道断开终止13
14SIGALRM定时器信号终止14
15SIGTERM终止进程终止15
16SIGSTKFLT栈错误终止16
17SIGCHLD子进程退出忽略
18SIGCONT继续执行若停止则继续执行
19SIGSTOP停止执行(必停)暂停执行
20SIGTSTP停止暂停执行
21SIGTTINStopped (tty input)暂停执行
22SIGTTOUStopped (tty out put)暂停执行
23SIGURGio紧急数据忽略
24SIGXCPU突破对cpu时间的限制终止、core dump152
25SIGXFSZ突破对文件大小的限制终止、core dump153
26SIGVTALRM虚拟定时器超时终止26
27SIGPROF性能分析定时器超时终止27
28SIGWINCH终端窗口尺寸发生变化忽略
29SIGIOio时可能产生终止29
30SIGPWR电量行将耗尽终止30
31SIGSYS错误的系统调用终止、core dump159
34~64SIGRTMIN~SIGRTMAX实时信号终止34~64

进一步总结如下:

  1. 能使进程被终止执行并产生core dump的信号,它的退出状态码是信号编号+128,比如SIGQUIT信号,它的编号为3,进程收到该信号后会core dump,退出状态码为3+128=131;

  2. 只是使进程被终止,而不会产生core dump的信号,它的退出状态码就是信号本身的编号。