(转)Linux进程被信号杀死后退出状态码(exit code)的分析
linux系统下,进程对信号的默认响应方式有5种:
1) 忽略信号,即当做没收到信号一样;
2) 终止进程;
3) 产生核心转储文件,同时进程终止;
4) 停止进程,即暂停进程的执行;
5) 于之前的暂停之后恢复执行;
处理方式2和3都会导致进程终止执行并立即退出,处理方式1、4、5不会造成进程终止执行。因此,可以将信号粗略的分为两类,一类是会导致进程终止并退出的信号;另一类则是不会导致进程终止并退出的信号。
当进程因收到信号被终止执行退出后,父进程可以通过调用wait或waitpid得到它的exit code。进程被各信号终止的退出状态码总结如下:
信号编号
信号名称
信号描述
默认处理方式
Exit code
1
SIGHUP
挂起
终止
1
2
SIGINT
终端中断
终止
2
3
SIGQUIT
终端退出
终止、core dump
131
4
SIGILL
非法指令
终止、core dump
132
5
SIGTRAP
跟踪/断点陷阱
终止、core dump
133
6
SIGABRT
终止进程
终止、core dump
134
7
SIGBUS
Bus error
终止、core dump
135
8
SIGFPE
算术异常
终止、core dump
136
9
SIGKILL
杀死进程(必杀)
终止
9
10
SIGUSR1
用户自定义信号1
终止
10
11
SIGSEGV
段错误
终止、core dump
139
12
SIGUSR2
用户自定义信号2
终止
12
13
SIGPIPE
管道断开
终止
13
14
SIGALRM
定时器信号
终止
14
15
SIGTERM
终止进程
终止
15
16
SIGSTKFLT
栈错误
终止
16
17
SIGCHLD
子进程退出
忽略
无
18
SIGCONT
继续执行
若停止则继续执行
无
19
SIGSTOP
停止执行(必停)
暂停执行
无
20
SIGTSTP
停止
暂停执行
无
21
SIGTTIN
Stopped (tty input)
暂停执行
无
22
SIGTTOU
Stopped (tty out put)
暂停执行
无
23
SIGURG
io紧急数据
忽略
无
24
SIGXCPU
突破对cpu时间的限制
终止、core dump
152
25
SIGXFSZ
突破对文件大小的限制
终止、core dump
153
26
SIGVTALRM
虚拟定时器超时
终止
26
27
SIGPROF
性能分析定时器超时
终止
27
28
SIGWINCH
终端窗口尺寸发生变化
忽略
无
29
SIGIO
io时可能产生
终止
29
30
SIGPWR
电量行将耗尽
终止
30
31
SIGSYS
错误的系统调用
终止、core dump
159
34~64
SIGRTMIN~
SIGRTMAX
实时信号
终止
34~64
进一步总结如下:
1. 能使进程被终止执行并产生core dump的信号,它的退出状态码是信号编号+128,比如SIGQUIT信号,它的编号为3,进程收到该信号后会core dump,退出状态码为3+128=131;
2. 只是使进程被终止,而不会产生core dump的信号,它的退出状态码就是信号本身的编号。
————————————————
版权声明:本文为CSDN博主「halfclear」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/halfclear/java/article/details/72783900