Linux程序崩溃时的信号量(signal)说明

news2024/12/23 9:44:49

一、概念说明

在程序崩溃的时候,我们将会获取到两个信息:

• signal: 信号量,下文将会详细的说明不同的信号量及其含义

• code: 错误码, 除了几个所有信号量(signal) 公共的错误码(code),一般不同信号量(signal)有特定的错误码(code),可以看做是信号量(signal)的补充说明。

二、信号量(signal) 和 错误码(code)说明

本节只介绍与崩溃相关的几个 signal(CrashSDK 捕获的 signal)及相关 code 的说明,更多内容见后面的参考文献或网上找资料了解。

1. SIGILL

SIG是信号名的通用前缀,ILL是 illegal instruction( 非法指令 ) 的缩写。

对应的数值为 4

SIGILL 是当一个进程尝试执行一个非法指令时发送给它的信号。

常见原因有:

  1. CPU架构不匹配
  2. .so 文件被破坏,或者代码段被破坏导致;
  3. 主动崩溃,如 _builtintrap() 也会使用非法指令来实现。

si_addr 为出错的指令。

该信号量中常见的错误码说明:

Code
说明
ILL_ILLOPC非法的操作码(opcode)
ILL_ILLOPN非法的操作数(operand)
ILL_ILLADR非法的寻址模式
ILL_ILLTRP非法的trap
ILL_PRVOPC特权操作码(Privileged opcode)
ILL_PRVREG特权寄存器(Privileged register)
ILL_COPROC协处理器错误
ILL_BADSTK内部堆栈错误

2. SIGBUS

SIG是信号名的通用前缀,BUS是bus error (总线错误 ) ,意味着系统检测到硬件问题后发送给进程的信号。

对应的数值为7

通常该信号的产生不是因为硬件有物理上的损坏,而是代码实现有 bug 导致 ,如地址不对齐,或者不存在的物理地址等。

si_addr 为所访问的非法地址。

该信号量中常见的错误码说明:

Code
说明
BUS_ADRALN访问的地址不对齐。32位处理器一般要求指针是4字节对齐的
BUS_ADRERR访问不存在的物理地址。一般是由于 mmap 的文件发生 truncated 导致。常见于文件访问过程中,被删除或者替换;或 mmap 到内存后,继续向文件写入且导致文件 truncated,再读取时就会出现该错误;另外, mmap 且访问超过文件实际大小的空间时,也可能会出现该错误
BUS_OBJERR特定对象的硬件错误
BUS_MCEERR_ARBUS_MCEERR_AR
BUS_MCEERR_AQBUS_MCEERR_AQ

3. SIGSEGV

SIG 是信号名的通用前缀, SEGV 是 segmentation violation 的缩写。

对应的数值为 11

该信号意味着一个进程执行了一个无效的内存引用,或发生段错误

si_addr 为所访问的无效地址。

该信号量中常见的错误码说明:

Code
说明
SEGV_MAPERR地址不在 /proc/self/map 映射中
SEGV_ACCERR没有访问权限

4. SIGFPE

SIG是信号名的通用前缀。FPE是floating-point exception(浮点异常)的首字母缩写拼接而成。

对应的数值为 8

该信号一般是算术运算相关问题导致的。

si_addr 为失败的指令。

该信号量中常见的错误码说明:

Code
说明
FPE_INTDIV整数除以 0
FPE_INTOVF整数溢出
FPE_FLTDIV浮点数除以 0
FPE_FLTOVF浮点数向下溢出
FPE_FLTRES浮点数结果不精确
FPE_FLTINV无效的浮点运算
FPE_FLTSUB下标超出范围

5. SIGABRT

SIG是信号名的通用前缀。ABRT是abort program的缩写。

对应的数值为 6

该信号意味着异常退出;通常是调用 abort(), raise(), kill(), pthread_kill() 或者被系统进程杀死时出现。

当错误码为 SI_USER 时表示是被其它程序杀死,一般情况是由于ANR被 system_server 杀死;

其他错误码一般是业务自己调用 abort() 等函数退出,此时错误码一般认为无效。

6. SIGSTKFLT

SIG是信号名的通用前缀,STKFLT是stack fault 的缩写。

对应的数值为 16

按照官方文档说明,该信号量意味着协处理器栈故障。

根据网上的部分问题结论说明,在内存耗尽时,一般 malloc 返回 NULL 且设置 errno 为 ENOMEM,但有些系统可能会使用 SIGSTKFLT 信号代替。

7. SIGPIPE

该信号对应的数值为 13

该信号意味着管道错误,通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止仍继续往管道写,写进程就会收到 SIGPIPE 信号。

8. SIGUSR2

为 12。用户自定义信号2。

9. SIGTERM

SIG是信号名的通用前缀,TERM 是 Termination 的缩写。该信号对应的数值为 15

与 SIGKILL (signal 9) 类似,不过 SIGKILL 不可捕获,而 SIGTERM 可被捕获。一般常见于 APP 处于后台时,被系统 vold 进程使用 SIGTERM 杀死,该情形基本没有意义,可忽略。

另外,chromium 多进程架构中,经常也会使用 SIGTERM 杀死出现了异常的子进程。

10. SIGSYS

该信号对应的数值为 31,通常是因为无效的 linux 内核系统调用而产生。

在 android O (android 8.0) 中,部分不安全的系统调用被移除,若代码中仍然使用它们,则会出现 SIGSYS。

11. SIGTRAP

该信号对应的数值为 5。gdb 调试设置断点等操作使用的信号。

Code
说明
TRAP_BRKPTTRAP_BRKPT
TRAP_TRACETRAP_TRACE
TRAP_BRANCHTRAP_BRANCH
TRAP_HWBKPTTRAP_HWBKPT

其他的信号对应的数值如下

参考文献:

  1. siginfo_t — data structure containing signal information
  2. linux系统编程之信号(一):中断与信号
  3. linux系统编程之信号(六):信号发送函数sigqueue和信号安装函数sigaction
  4. SIGSTKFLT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能工业通信解决方案!钡铼BL124实现Modbus转Ethernet/IP互联!

钡铼技术BL124 Modbus转Ethernet/IP协议网关是一款专为工业自动化领域而设计的先进设备。它提供了可靠的通信解决方案,能够将Modbus通信协议与Ethernet/IP通信协议进行高效转换,实现不同类型设备之间的无缝集成和通信。 添加图片注释,不超过 …

冲刺十五届蓝桥杯P0004递增三元组

文章目录 题目解析代码如下 题目 递增三元组 解析 用到线性代数的知识,原来的三元组一共有27钟组合,不一一列举了。如果将三元组排序一下,得到的27钟组合和原来时一样的,只是顺序变了而已。 我们以b组为核心,遍历b组…

矢量图绘制软件EazyDraw mac中文版软件介绍

EazyDraw mac是一款功能强大且易于使用的矢量绘图软件。 EazyDraw mac软件介绍 矢量绘图工具:EazyDraw 提供了一套全面的矢量绘图工具,包括直线、曲线、多边形、文本框、图形填充等。用户可以使用这些工具创建和编辑精确的矢量图形,无论是简…

电动主轴与气动主轴的优缺点

随着工业自动化的不断发展,主轴的应用越来越广泛,并且不断改进优化。目前,市面上常用的主轴主要有两种:电动主轴和气动主轴。为了更好地选择和使用主轴,我们需要了解电动主轴和气动主轴各有什么优缺点? 电动…

徐明君:企业管理的新视角,业务与行为的整合

随着社会的发展和科技的进步,企业管理在社会化大生产的背景下愈显重要。近日,在一次企业管理的论坛上,众多业界人士针对企业管理的新视角进行了深入探讨,强调了业务管理和行为管理并重的重要性。 业务管理主要侧重于对企业的各种…

CS5366最新设计电路|Typec转HDMI 8K带PD方案设计|带DSC视频压缩技术Typec扩展方案

CS5366支持4K24/25/30/50/60Hz刷新率的HDR,CS5366集成DSC decoded影像解压缩技术,可将DPRX 4Lanes等效宽推升至97.2Gbps或 DPRX 2Lanes等效带宽推升至48.6Gbps ,此功能可改善画面延迟、影像撕裂等问题,可让用户在观看电影或是电玩游戏等高效能影像时有更好的体验。…

unity设计模式——代理模式

Subject类,定义了Real Subject和Proxy的共用接口,这样就在任何使用Real Subject的地方都可以使用Proxy。 abstract class Subject : MonoBehaviour {public abstract void Request(); } RealSubject类,定义Proxy所代表的真实实体。 class R…

nginx高可用配置(五)

keepalived keepalived安装 1.#进入根目录下的 usr目录 cd /usr 2.#安装keepalived yum install keepalived -y 3.安装完成后在根目录etc下会有个keepalived目录 4.进入keepalived目录 cd keepalived/ 5.ll命令查看,会有个配置文件 keepalived.conf 6.ke…

【已解决】Python打包文件执行报错:ModuleNotFoundError: No module named ‘pymssql‘

【已解决】Python打包文件执行报错:ModuleNotFoundError: No module named pymssql 1、问题2、原因3、解决 1、问题 今天打包一个 tkinter pymssql 的项目的时候,打包过程很顺利,但是打开软件的时候,报错 ModuleNotFoundError: …

何林达获得“软件方法建模师”称号

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 何林达做对所有强化自测题,获得“软件方法建模师”称号。 软件方法建模师 满分完成当前所有《软件方法》强化自测题的同学,可获得“软件方法建模师”的称号。…

GPT系列论文解读:GPT-3

GPT系列 GPT(Generative Pre-trained Transformer)是一系列基于Transformer架构的预训练语言模型,由OpenAI开发。以下是GPT系列的主要模型: GPT:GPT-1是于2018年发布的第一个版本,它使用了12个Transformer…

zabbix监控,zabbix部署

目录 zabbix监控 zabbix概述 zabbix 监控原理 zabbix 6.0功能组件 1、Zabbix Server 2、数据库 3.、Web 界面 4、Zabbix Agent 5、Zabbix Proxy 6、Java Gateway Zabbix部署 部署 zabbix 服务端 zabbix的客户端部署 自我监控 添加zabbix的其他客户端主机 zabbix…

BUGKU-simple_SSTI_1漏洞注入

SSTI漏洞注入 SSTI全称Server side template injection.服务端模板注入这节课主要讲flask的模板注入.flask会把类似于 的变量当做参数来渲染并填充到web页面,如果该参数可控并被后台解析则有可能被注入恶意代码导致注入漏洞请注意 模板注入只会存在于二次渲染中,无二次渲染不会…

漏刻有时数据可视化Echarts组件开发(39)splitLine网格线效果

splitLine设置坐标轴网格线的样式 show:是否显示网格线。默认为true。lineStyle:线条样式,包括类型(type)、颜色(color)、宽度(width)等。例如,可以设置为da…

JVM篇---第九篇

系列文章目录 文章目录 系列文章目录一、什么是指针碰撞?二、什么是空闲列表三、什么是TLAB? 一、什么是指针碰撞? 一般情况下,JVM的对象都放在堆内存中(发生逃逸分析除外)。当类加载检查通过后&#xff0…

【自用】ubuntu 18.04 LTS安装opencv 3.4.16 + opencv_contrib 3.4.16

1.下载 opencv 3.4.16 opencv_contrib 3.4.16 其中,opencv_contrib解压后的多个文件夹复制到opencv内、合并 声明:尚未验证该方式是否可行 2.安装 参考博文: https://zhuanlan.zhihu.com/p/650792342 https://zhuanlan.zhihu.com/p/8719780…

Java基于SpringBoot 的汽车租赁系统

1 简介 致远汽车租赁管理方面的任务繁琐,以至于公司每年都在致远汽车租赁管理这方面投入较多的精力却效果甚微,致远汽车租赁系统的目标就是为了能够缓解致远汽车租赁管理工作方面面临的压力,让致远汽车租赁管理方面的工作变得更加高效准确。 文章首发地址 2 技术栈 开发语言…

前端实现chatGpt流式输出 - SSE

前端实现chatGpt流式输出 - SSE 一、chatGpt流式输出技术分析 在使用ChatGPT时,模型的回复内容是连续输出,而不是整段话直接出现,因为模型需要不断预测接下来要回复什么内容,如果等整段回复生成之后再输出到网页,用户…

修改el-tab标签页的label默认样式(插槽)

目录 需求: 修改方式: 原始代码: 修改代码: 具体步骤: 需求: 修改el-tab标签页的label默认样式(如图所示,该label标签的字体较小,以至于在页面上不太明显&#xff0c…

蔡司光学:儿童近视眼镜的匠心之选

如今我们正处于“信息爆炸”的时代,生活的方方面面都离不开手机、平板和电脑等各种电子设备,加上不正确的用眼习惯,也使青少年及儿童的近视率呈现逐年攀升的态势,为了及时预防儿童近视,业内著名眼视光品牌蔡司光学积极…