计算机应用软件自纠错自重起方法技术

技术编号:2871237 阅读:214 留言:0更新日期:2012-04-11 18:40
本发明专利技术是一种计算机应用软件自纠错自重起方法。该方法包括创建一个外部监控进程、系统启动、外部进程先启动、并由外部进程来创建和启动应用软件程序的内部进程,外部监控进程定期地对内部进程发送状态报告请求,在内部进程运行正常的情况下,内部进程对外部进程所发送的状态报告请求做出正确和及时的反馈,当内部进程出现非正常退出或停止响应时,如果外部进程在一段时间内一直收不到反馈消息,则外部进程对内部进程发送终止消息,或杀掉内部进程,并自动建立一新的内部进程的步骤。本发明专利技术可解决现有技术中程序不可预测地退出或无响应等问题,在应用软件程序内部进程出故障时不需要重新启动系统,可为用户节省大量时间。(*该技术在2023年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术属于涉及一种计算机软件控制
,具体地说是一种。
技术介绍
目前,应用软件很难避免不出现缺陷,而缺陷的出现,常常使程序不可预测地退出或无响应。遇此情况,一般的操作系统通常只能先关闭无响应的运行程序后再重新启动它。在现有技术中,视窗2000中操作系统常用Ctrl-Alt-Delete键激活任务管理器来对无响应的程序进行终止,然后再重新运行。这对于一般应用来说并不存在太大的问题,最多只是对用户不是很友好而已。但对于某些特殊的应用场合,比如不能太长时间中断的监控应用、不能由用户进行干涉的嵌入式系统,程序的出错影响就比较大了,因为这无法通过用户干预来处理出错程序。对于程序出错,目前技术上主要采用出错处理机制的方式,即在程序里监控应用中可能发生的代码,使其发生异常出错时能进入设计者预先设计的流程中。在C语言中,常见的错误处理是对可能出错的语句进行返回值判断。在C++语言中则引入了异常破获机制,如Try-throw-catch结构就是典型的异常破获机制。但是这些方法的不足之处在于,每个出错的地方都应该是程序员所知道并进行防范的地方,而再完善的考虑,也不可能预测、防范和控制所有的出错情况。
技术实现思路
有鉴于此,本专利技术的目的是提供一种,它可使应用程序在不可预测情况出错退出或无响应时,能自动关闭已错进程并重新开启新的进程副本,保证系统长时间正常运行。为完成上述目的,本专利技术采取的技术方案为一种,包括创建一个外部进程,系统启动时,外部进程先启动,并由外部进程来创建和启动应用软件程序的内部进程,外部进程定期地对内部进程发送状态报告请求,在内部进程运行正常的情况下,内部进程对外部进程所发送的状态报告请求做出正确和及时的反馈,当内部进程出现非正常退出或停止响应时,如果外部进程在一段时间内一直收不到反馈消息,则外部进程对内部进程发送终止消息或杀掉内部进程,并自动建立一新的内部进程的步骤。内部进程完成应用软件程序的主要功能和任务。外部进程负责监控内部进程的运行;外部进程包括通讯和错误判断纠错机制;通讯机制负责向内部进程发送请求和接收反馈,它通过消息传递方式实现内部进程和外部进程之间的消息传递;错误判断纠错机制负责对通讯接收到的内部进程反馈的消息进行分析处理。错误判断纠错机制进一步包括判断是否能按时收到内部进程发来的反馈消息,如果长时间得不到内部进程发来的反馈消息,则检查内部进程是否还存在,如果内部进程仍然存在,则认为内部进程出现了死锁,于是便发出终止消息杀掉内部进程,再重新启动一个内部进程,如果内部进程已经不存在,则直接重新启动一个内部进程的步骤。内部进程内部设有定时器,以判断应用程序内部进程的响应;外部进程定期对内部进程发送的状态报告请求是每隔一定时间(如1到5秒钟)向内部进程发的状态询问信号;外部进程内部有一个响应标志,它判断内部进程的错误累计数值,外部进程发一次状态询问信号,该响应标志的值就增加1。定时器进一步包括向内部进程发状态报告请求信号,如果内部进程错误累计数达到一定值时,则认为内部进程死锁,于是使外部进程的响应标志错误累计数值加1的步骤;在内部进程运行正常的情况下,内部进程对外部进程所发送的状态报告请求做出正确和及时的反馈,将外部进程响应标志的错误累计数值清零;纠错机制进一步包括如果外部进程响应标志错误累计数值超过一定的阈值,则启动一个新的应用程序内部进程,如果内部进程错误累计数值小于一定的阈值但超过一定的数值时,则让应用程序自己关闭,如果应用程序无法自动关闭,则强制将其杀掉,再启动一个新的应用程序内部进程的步骤;纠错机制还包括将内部进程错误累计数值增加一个较大的数以迅速重新启动一个新的内部进程步骤。在本专利技术方法中,因为外部进程不做其他复杂的工作,所以它在设计和运行中一般不会出现问题,而内部的问题又及时地被外部进程所解决处理,这样,在很大程度上解决了程序的不正常、不确定错误的处理,可使应用程序能更健壮地长时间工作和运行。附图说明图1是本专利技术的系统示意图;图2是本专利技术的启动流程图;图3是本专利技术的系统正常运行流程图;图4是本专利技术内部进程崩溃时处理流程图。具体实施例方式下面结合附图和具体实施方式对本专利技术作进一步详细的说明。在嵌入式媒体播放系统中,随着系统媒体播放软件功能的强大,多种媒体格式都必须兼容,而错误的媒体信息和不正确的用户操作,很难避免程序不出现不接受用户响应或程序非正常退出的情况。由于嵌入式的设计,用户不可能重新关闭错误程序重新运行。请参阅图1,本专利技术实施例的嵌入式媒体播放系统有一个外部进程,系统启动后,首先启动外部进程,由此外部进程来启动内部进程。外部进程向内部进程发状态报告请求,内部进程查询自身状态,并向外部进程反馈自身状态。参阅图2,本专利技术实施例使用可免费使用的多用户操作系统中的信号机制即消息传递方式进行进程间通讯,来完成状态报告。首先创建一个外部监控进程,当系统启动时,该外部进程先启动,并由外部进程来创建和启动应用软件程序的内部进程,内部进程完成应用软件程序的主要功能和任务,外部进程负责监控内部进程的运行。外部进程包括通讯和错误判断纠错机制,通讯机制负责向内部进程发送请求和接收反馈,它通过消息传递方式实现内部进程和外部进程之间的消息传递,错误判断纠错机制负责对通讯接收到的内部进程反馈的消息进行分析处理。内部进程内设有定时器,以判断应用程序内部进程的响应,外部进程定期(如每隔1到5秒钟或每隔2秒钟)向内部进程发状态询问信号,外部进程内部有一个响应标志,它判断内部进程的错误累计数值,外部进程每发一次状态询问信号,该响应标志的值就增加1。内部进程收到外部进程发出的状态询问信号后,向外部进程发出一个反馈消息,外部进程收到该反馈消息后,就将响应标志的错误累计数值清零。为迅速重新启动一个新的内部进程,本专利技术设计内部进程错误累计数值一次增加一个较大的数如30。本专利技术的定时器Timer的处理函数如下 <pre listing-type="program-listing"> static void sig_alarm() { char szCmdStr; if(childpid&gt;0) { errno=0; kill(childpid,SIGUSR1); ∥向应用程序内部进程发监测消息,本专利技术通过发送信号SIGUSR1进行状态询问。 if(errno==ESRCH);∥如果应用程序的进程号已经不存在,即监测消息根本无接受进程 { nImAlive=30; ∥将错误累计数值增加30,为了迅速地重新启动一个新进程,本专利技术用nImAlive值的大小进行判断是否重新开启 } alarm(1);}nImAlive++; ∥发出的信号数+1。alarm(1);}接收应用程序内部进程反馈信息的消息处理函数如下static void sig_usr(int signumber){ nImAlive=0; ∥将nImAlive清零}∥应用程序内部进程状态并没有太多的反馈,在其收到外部进程所发探测信号后进行nImAlive清零</pre>内部进程内设有定时器,以判断应用程序内部进程的响应,定时器是一段程序性方法,它包括向内部进程发状态报告请求信号,如果内部进程错本文档来自技高网...

【技术保护点】
一种计算机应用软件自纠错自重起方法,其特征在于该方法包括以下步骤:(1)创建一个外部进程;(2)系统启动,外部进程先启动,并由外部进程来创建和启动应用软件程序的内部进程;(3)外部进程定期地对内部进程发送状态报告请求 ,在内部进程运行正常的情况下,内部进程对外部进程所发送的状态报告请求做出正确和及时的反馈;(4)当内部进程出现非正常退出或停止响应时,如果外部进程在一段时间内一直收不到反馈消息,则外部进程对内部进程发送终止消息或杀掉内部进程,并自动 建立一新的内部进程。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:赵明韩抗
申请(专利权)人:联想北京有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利