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

智能推荐

Python 入门的60个基础练习_练习python基础语法-程序员宅基地

文章浏览阅读4.2w次,点赞329次,收藏2.7k次。Python 入门的60个基础练习_练习python基础语法

iOS6和iOS7代码的适配(2)——status bar_ios7 statusbar-程序员宅基地

文章浏览阅读1w次。用Xcode5运行一下应用,第一个看到的就是status bar的变化。在iOS6中,status bar是系统在处理,应用_ios7 statusbar

gdb调试时No symbol "var" defined in current context && No Register_no registers调试显示-程序员宅基地

文章浏览阅读2.1k次。问题描述:,在gdb调试程序输出变量:p var,会提示No symbol "var" in current context.原因:程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。这个是很正常的,因为优化程序会删改程序,整理程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指_no registers调试显示

IDGeneratorUtil 主键id生成工具类_idgeneratorutils.generateid()-程序员宅基地

文章浏览阅读3.4k次。import java.util.Random;import org.drools.util.UUIDGenerator;/** * * * 类名称:GenerateIdUtil * 类描述: 主键生成工具类 * @author chenly * 创建时间:Jul 10, 2012 8:10:43 AM * 修改人: * 修改时间:Jul 10, 2012 8..._idgeneratorutils.generateid()

关于汇编 BX 和 BLX 跳转指令_汇编blx-程序员宅基地

文章浏览阅读5k次。BX:跳转到寄存器reg给出的目的地址处,如:BX R2BLX:跳转到寄存区reg给出的目的地址处并将返回地址存储到LR(R14)使用这两个指令时有一点特别需要注意:跳转的目的地址必须是奇数,若不是奇数则在后面加1,如某函数的起始地址是0x80000f00,则要跳转到此函数则应该跳转到0x80000f01处!否则会进入硬件错误中断!..._汇编blx

前端vue,打包整合进后端springboot的resources里面后,运行只要刷新就报404_前端项目放入resource-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏4次。vue打包后,其实就剩index.html和一堆静态资源,页面的加载和替换都是通过刷新index.html种的dom来实现的(应该是这样,可能表述不是很好),所以做个重定向就可以了。(博主是这么解决的,网上还有很多人是各种路径错误,大家可以尝试下自己是哪个原因)import org.springframework.boot.web.server.ConfigurableWebServerFa..._前端项目放入resource

随便推点

添加远程github仓库时报错 Warning: Permanently added the RSA host key for IP address 52.74.223.119_cmd warning: permanently added-程序员宅基地

文章浏览阅读9.7k次。1.问题展示2.解决方案1.任意窗口, 打开git bash2.命令行界面, 输入cd C:3.cat ~/.ssh/id_rsa.pub正常下面应该显示一大串公钥如果没有,显示如下图, 则进行下一步, 创建公钥4.创建公钥, 输入 ssh-keygen5.然后一直下一步, 直到出现6.再次输入cat ~/.ssh/id_rsa.pub下面一大串数字便是公钥,复制这些字符串, 打开github, 点击头像, 打开settings, 打开SSH and GPG Keys_cmd warning: permanently added

SQL*Plus 使用技巧1-程序员宅基地

文章浏览阅读154次。[code="java"]1. SQL/Plus 常用命令 a. help [topic] 查看命令的使用方法,topic表示需要查看的命令名称。 如: help desc; b. host 该命令可以从SQL*Plus环境切换到操作系统环境,以便执行操作系统命名。 c. host [command] 在sql*plus环境中执行操作系统命令,如:host notepad.exe..._sql+plus的使用方法

域控服务器搭建与管理论文,校园网络服务器的配置与管理 毕业论文.doc-程序员宅基地

文章浏览阅读441次。该文档均来自互联网,如果侵犯了您的个人权益,请联系我们将立即删除!**学校毕 业 论 文**学校园网络服务器的配置与管理姓 名: **学 号: **指导老师:系 名:专 业: 计算机网络技术班 级:二0一一年十二月十五日摘 要随着网络技术的不断发展和Internet的日益普及,许多学校都建立了校园网络并投入使用,这无疑对加快信息处理,提高工作效..._服务器配置与应用论文

mysql单实例多库与多实例单库_数据库单实例和多实例-程序员宅基地

文章浏览阅读1k次。一、单实例多库:一个mysql实例,创建多个数据目录。规划:实例路径:/usr/local/mysql数据目录路径:(1)/usr/local/mysql/data(2)/usr/local/mysql/data2步骤:安装mysql。配置my.cnf文件。初始化各个数据库。用mysqld_multi启动。1、安装mysql。平常安装。2、m..._数据库单实例和多实例

MFC解决找不到MFC90.DLL的问题_microsoft v90.debugmfc-程序员宅基地

文章浏览阅读6.3k次。今天装了第三方的MFC软件库Xtreme ToolkitPro v15.0.1,听说搞MFC的人都知道它的强大,我刚学习,所以装了一个,然后想运行一下它自带的例子看看。出现一个“找不到mfc90.dll“的问题,百度一下,记录如下:vs2008已经打过sp1补丁,编译C++程序会提示找不到mfc90.dll文件的错误,但是如果是release版的话就能正常运行csdn看到解决方案,粘贴_microsoft v90.debugmfc

XeLaTeX-中文排版解决方案_latex 中文排版 texlive-程序员宅基地

文章浏览阅读2.1k次。以前使用CJK进行中文的排版,需要自己生成字体库,近日,出现了XeTeX,可以比较好的解决中文字体问题,不需要额外生成LaTeX字体库,直接使用计算机系统里的字体,本文以在Linux下为例说明XeTeX的使用。操作系统: UbuntuTeX:除了texlive包外,还需要安装的包是texlive-xetex。字体:可以使用fc-list查看你自己的字体库,注意字体的完整名称,在XeTe..._latex 中文排版 texlive