linux的c语言捕获sigsegv,一种嵌入式Linux系统下C语言监控软件容错的方法与流程...-程序员宅基地

技术标签: linux的c语言捕获sigsegv  

0165f1c6044054fb8f9625528e1cd8e2.gif

本发明属于服务器监控管理技术领域,具体涉及一种嵌入式Linux系统下C语言监控软件容错的方法。

背景技术:

目前嵌入式Linux系统已经广泛应用在了服务器监控领域,这些监控软件,时时刻刻对服务器的运行状态进行监控管理,需要保持长时间的稳定运行,并能够在自身崩溃的情况下,在较短的时间内重新运行。

目前,大部分监控软件,使用C语言进行开发。但C语言中,没有提供类似C++中的trycatch类型的异常处理机制,一旦遇到某些如段错误、浮点运算错误等问题,程序就会崩溃退出。要保证程序继续运行,目前的解决方案是对监控软件进行定期检查,一旦检测到监控软件异常终止,就再重新运行该监控软件,这种方法一方面操作复杂,每次检查都需要重新编辑组织语言;另一方面,只能通过检查进行预防,而不能时刻解决异常问题。

因此,提供一种嵌入式Linux系统下C语言监控软件容错的方法是十分必要的。

技术实现要素:

本发明的目的在于解决上述现有技术中存在的缺少try catch类型的异常处理机制,无法在监控软件中进行错误处理等难题,提供一种嵌入式linux系统下C语言监控软件容错的方法。

本发明是通过以下技术方案实现的:

一种嵌入式Linux系统下C语言监控软件容错的方法,其特征在于:包括以下步骤:(1)监控软件开始运行;

(2)代码是否满足监控条件,如果满足进入步骤(3),若不满足,退出监控;

(3)进行注册信号处理;一旦监控软件发生错误,错误就由信号处理流程接管,而不是由操作系统处理,一般是直接退出;

(4)检测信号,检测是否存在错误信号,如果不能检测到错误信号,执行正常监控流程,进入步骤(5),如果检测到错误信号,则执行错误处理,跳转至步骤(2);将检测信号处理过程增加在监控主体前,无信号时进行正常的监控主体流程,有信号时则进行错误处理。

(5)监控主体是否产生错误信号,如果产生错误信号,进行信号处理,并跳转至步骤(4),如果没有产生错误信号,则跳转至步骤(2)重新开始监控流程。在信号处理过程中,增加跳转,使程序跳回监控程序的循环流程。

作为优选,所述步骤5中进行信号处理时,还进行日志记录操作。

作为优选,所述步骤5中进行信号处理时,还进行信号类型记录操作。

作为优选,所述步骤(4)中进行错误处理时,还进行错误发生时间记录操作。

作为优选,所述步骤(4)中进行错误处理时,还进行全局变量记录操作。

一种用于实现上述容错方法的系统,该系统集中于嵌入式Linux系统的操作核心层,其特征在于:包括监控管理模块,以及与其相连接的进程管理模块、信号处理模块、错误处理模块,所述进程管理模块、信号处理模块、错误处理模块依次连接,其中:

(1)进程管理模块,该模块用于实现监控过程周期管理,包括监控进程的创建、调度、通信,使得原生进程在有序执行原有逻辑的同时,满足C语言容错监控的需要;

(2)信号处理模块,该模块用于实现注册信号检测以及信号处理,注册信号检测到错误后,首先程序自行进行处理,无法解决时进入Linux操作系统处理;信号处理模块将终端的程序流程跳转,重新回到监控流程中;

(3)错误处理模块,该模块用于实现错误类型诊断以及根据预配置采取相应错误处理方式,完成错误修复;

(4)监控管理模块,包括总控制端以及内部管理端,总控制端提供给用户可视的操作界面,内部管理端与总控制端进行交互,使得用户可在总控制端查看监控软件运行状态,容错日志,对系统各项参数进行预配置。

与现有技术相比,本发明的有益效果是:

本发明提供的一种嵌入式Linux环境下C语言监控软件容错的方法,通过在C语言中实现类似C++中的try catch异常处理结构,在监控软件中第一时间捕获错误,并对错误进行处理,避免程序发生崩溃,从而使得监控软件具有更强的容错性。能使得监控软件在遇到段错误、浮点运算错误、退出错误的情况下,保证监控程序的循环过程一直执行,并能够在错误处理过程里对错误信息、错误发生的位置进行记录,以便于错误的分析。方案中还提供了用于实现该方法的系统设计,该系统基于C语言监控软件的容错策略和方法,实现了对监控过程中错误程序的处理,性能损耗小,有效提高了系统的操作可靠性,避免了硬件定制的复杂性。

此外,本发明方法原理可靠,步骤简单,具有非常广泛的应用前景。

由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。

附图说明

图1是本发明提供的一种嵌入式Linux环境下C语言监控软件容错的方法的工作流程图。

图2是本发明提供的一种嵌入式Linux环境下C语言监控软件容错系统的结构示意图。

其中,1-进程管理模块,2-信号处理模块,3-错误处理模块,4-监控管理模块,41-总控制端,42-内部管理端。

具体实施方式

下面结合附图对本发明作进一步详细描述:

一种嵌入式Linux系统下C语言监控软件容错的方法,首先对通用的监控软件的处理流程做一个说明。监控软件(main)是一个根据一定的定时规则,无限循环执行的程序。要保证监控软件的持久性运行,需要监控核心代码(monitor)足够的稳定,不出差错。但随着代码的复杂度增加,出错的几率逐渐变大,特别是一些偶发性的、复现率低的错误。这些错误,如浮点运算除以0,就会导致监控程序出错退出。下面表格中的代码,是本实施例的代码框架。以其为例进行本发明容错方法的描述。

如图1所示,一种嵌入式Linux系统下C语言监控软件容错的方法,包括以下步骤:

(1)监控软件开始运行;

(2)代码是否满足监控条件,如果满足进入步骤(3),若不满足,退出监控;

(3)进行注册信号处理;

(4)检测信号,检测是否存在错误信号,如果不能检测到错误信号,执行正常监控流程,进入步骤(5),如果检测到错误信号,则执行错误处理,跳转至步骤(2);

(5)监控主体是否产生错误信号,如果产生错误信号,进行信号处理,并跳转至步骤(4),如果没有产生错误信号,则跳转至步骤(2)重新开始监控流程。

其中,步骤(3)进行注册信号处理,对应示例代码的signal函数。如果为注册信号处理,一旦出错,程序就会退出,linux会弹出一个信息。注册信号处理后,发生错误后,首先由程序自己进行这些错误处理,自己处理不了时,才会被Linux操作系统处理。为保证程序不退出,至少应该对SIGSEGV、SIGFPE、SIGABRT注册信号处理。signal_hdl就是注册的信号处理函数。

步骤(4)中的检测信号对应示例代码中的sigsetjmp函数。这是一个选择结构,如果没有检测到信号,则执行正常监控(monitor)流程;如果检测到信号,则执行错误处理。在错误处理中,可以记录错误发生的时间,另外可以记录一些全局变量,以大体定位错误发生的位置。

步骤(5)中的信号处理操作对应示例代码中的signal_hdl函数。信号处理的主要目的是,将中断的程序流程跳转(siglongjmp),重新回到监控流程,而不是接收到信号后,就使监控程序退出。另外,可以在信号处理函数中,增加日志操作,对信号的类型等进行记录,作为bug分析日志的一部分。

如图2所示,本发明还提供了一种用于实现上述容错方法的系统,该系统集中于嵌入式Linux系统的操作核心层,包括监控管理模块4,以及与其相连接的进程管理模块1、信号处理模块2、错误处理模块3,所述进程管理模块1、信号处理模块2、错误处理模块3依次连接,其中:

(1)进程管理模块1,该模块用于实现监控过程周期管理,包括监控进程的创建、调度、通信,使得原生进程在有序执行原有逻辑的同时,满足C语言容错监控的需要;

(2)信号处理模块2,该模块用于实现注册信号检测以及信号处理,注册信号检测到错误后,首先程序自行进行处理,无法解决时进入Linux操作系统处理;信号处理模块将终端的程序流程跳转,重新回到监控流程中;

(3)错误处理模块3,该模块用于实现错误类型诊断以及根据预配置采取相应错误处理方式,完成错误修复;

(4)监控管理模块4,包括总控制端41以及内部管理端42,总控制端41提供给用户可视的操作界面,内部管理端42与总控制端41进行交互,使得用户可在总控制端41查看监控软件运行状态,容错日志,对系统各项参数进行预配置。

本发明提供的一种嵌入式Linux环境下C语言监控软件容错的方法,通过在C语言中实现类似C++中的try catch结构,在监控软件中第一时间捕获错误,并对错误进行处理,避免程序发生崩溃,从而使得监控软件具有更强的容错性。能使得监控软件在遇到段错误、浮点运算错误、退出错误的情况下,保证监控程序的循环过程一直执行,并能够在错误处理过程里对错误信息、错误发生的位置进行记录,以便于错误的分析。方案中还提供了用于实现该方法的系统设计,该系统基于C语言监控软件的容错策略和方法,实现了对监控过程中错误程序的处理,性能损耗小,有效提高了系统的操作可靠性,避免了硬件定制的复杂性。

上述技术方案只是本发明的一种实施方式,对于本领域内的技术人员而言,在本发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本发明上述具体实施方式所描述的方法,因此前面描述的方式只是优选的,而并不具有限制性的意义。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30141959/article/details/116946651

智能推荐

vim使用 tip3-程序员宅基地

文章浏览阅读4.2k次。折叠命令 zf 创建折叠(使用数字表示创建有当前行到下多少行的折叠,比如3j就创建包括4行的折叠) zo 打开折叠(l也可以打开折叠) zc 关闭当前折叠 zm 关闭所有折叠 zr 打开所有折叠 zE 删除所有折叠 zd 删除当前折叠 za 若当前打开则关闭,若当前关闭则打开

点乘和叉乘的区别_解析几何(一)【叉乘为啥这样定义】-程序员宅基地

文章浏览阅读1.5k次。笔者是一个数学系的在读本科生,若是文章中有纰漏,欢迎指出。本篇笔记仅供交流学习。在这里再安利一次【3Blue1Brown的线性代数的本质(Essense of Linear Algebra)系列】,对直观理解线性代数的问题真的非常有帮助。作者3Blue1Brown的主页:3Blue1Brow的主页​space.bilibili.com一、叉乘叉乘是解析几何中介绍的第一个相对比较陌生的概念。因此在解..._空间解析几何点乘和叉乘

经验:调教200多个ChatGPT模型后的经验分享_经验chart gpt-程序员宅基地

文章浏览阅读8.6k次,点赞4次,收藏23次。经验:调教200多个ChatGPT模型后的经验分享_经验chart gpt

tcpip测试工具软件,TCP Test Tool(TCP测试工具) V2.3 官方版-程序员宅基地

文章浏览阅读1w次。TCP Test Tool是一个小巧实用的TCP测试工具,它提供向任何WindowsPC或从任何WindowsPC启动和捕获TCP会话请求的能力。软件专为软件程序员和网络工程师设计,可用于任何IP网络,包括以太网局域网和无线IP网络,如CDPD、CDMA或GPRS。【功能特点】1.支持发送汉字。2.支持十六进制发送和接收方式。3.支持协议发送和接收数据。支持服务器模式和客户端模式。服务器模式主..._tcp测试工具

「Photoshop2021入门教程」新功能——快速操作_ps2021没有快速操作-程序员宅基地

文章浏览阅读1.1k次。PS新手教程哪里有?小编为大家带来Photoshop2021新手系列教程,今天我们来学习PS新功能——快速操作面板。打开图片菜单栏点击帮助-Photoshop帮助...弹出发现窗口,选择快速操作在快速操作中可以对图片进行快速操作,如移除背景模糊背景制作黑白背景等等,一键操作非常方便。你学会PS2021新功能快速操作了么?..._ps2021没有快速操作

如何根据程序崩溃时的DMP文件使用WinDbg查找调用堆栈_dump 直接打开看堆栈用什么工具windbg-程序员宅基地

文章浏览阅读9.6k次。如何根据程序崩溃时的DMP文件使用WinDbg查找调用堆栈 HOW TO: 查找问题的异常堆栈时出现的 UnhandledExceptionFilter 调用堆栈跟踪中http://support.microsoft.com/kb/313109/zh-cn察看本文应用于的产品 本页概要 使用 Windbg.exe 打_dump 直接打开看堆栈用什么工具windbg

随便推点

scrapy重试机制_Scrapy项目之User timeout caused connection failure(异常记录)-程序员宅基地

文章浏览阅读644次。Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0,html提示:此文存在问题,真正测试,请勿阅读,shell07-14 14:26更新:cookie通过两个多小时的测试,发现此问题的缘由是昨天编写爬虫程序后,给爬虫程序添加了下面的属性:网络download_timeout = 20dom此属性的解释:scrapyThe amount of time (in s..._user timeout caused connection failure

技术译文 | How Can ScaleFlux Handle MySQL Workload?-程序员宅基地

文章浏览阅读217次。本文是一篇译文,介绍 Percona 的工程师对 ScaleFlux 的性能压测报告翻译:杨奇龙原文地址:https://www.percona.com/blog/2020/08/06/how-can-scaleflux-handle-mysql-workload/最近作者有一个针对 ScaleFlux 的产品也叫做 CSD 2000 进行压测的机会. 本文中作者将介绍使用 Intel SSD 和 ScaleFlux 存储设备进行压测的对比结果。一 我们为什么需要不一样的 ScaleFlux?._scaleflux

electron vue vite 配置安装_wincodesign-2.5.0-程序员宅基地

文章浏览阅读460次。electon 打包安装_wincodesign-2.5.0

华为nova7可以用鸿蒙,华为鸿蒙系统再次更新7款可适配机型!对比安卓,鸿蒙OS的优势有哪些?...-程序员宅基地

文章浏览阅读6.2k次。原标题:华为鸿蒙系统再次更新7款可适配机型!对比安卓,鸿蒙OS的优势有哪些?自从鸿蒙OS系统全面启动公测以来,不断的在更新更多适配机型,就在前不久华为鸿蒙官网又新增了不少的机型,除了之前的Mate系列和P系列外,这次更新的机型有:华为nova6、nova65G、nova75G、nova7Pro5G、nova8、nova8Pro、MatePad10.8英寸。这些机型都可以体验鸿蒙OS 2.0公测版。..._nova7最好用的系统版本

Python-opencv之目标定位_python cv用于定位-程序员宅基地

文章浏览阅读1.5w次,点赞14次,收藏87次。最近团队准备参加一个无人机比赛,大致的规则是这样的:固定翼飞机从跑道起飞,然后在空中转体360°,通过GPS粗定位飞行至一个高13米左右,宽6米左右八字形框前(距离约50米左右),这时依靠计算机视觉的方法,让飞机准确的穿过去。(之后还有其他的动作,但是第一步大体就是这样)。 初步的方案:①通过机载摄像机获取图像序列 ②选取关键帧进行处_python cv用于定位

高速缓冲存储器cache介绍_c6713的第一级程序高速缓冲和第一级数据高速缓冲容量都是8kb,第一级存储器/高速缓冲的容量为32-程序员宅基地

文章浏览阅读8.4k次。cache介绍一、 Cache- 主存存储结构及其实现 为了解决存储器系统的容量、存取速度及单位成本之间的矛盾,可以采用 Cache- 主存存储结构,即在主存和 CPU 之间设置高速缓冲存储器 Cache ,把正在执行的指令代码单元附近的一部分指令代码或数据从主存装入 Cache 中,供 CPU 在一段时间内使用,由于存储器访问的局部性,在一定容量 Cache 的条件下,我_c6713的第一级程序高速缓冲和第一级数据高速缓冲容量都是8kb,第一级存储器/高速缓冲的容量为32kb。

推荐文章

热门文章

相关标签