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

文档序号:6438078阅读:164来源:国知局
专利名称:计算机应用软件自纠错自重起方法
技术领域
本发明属于涉及一种计算机软件控制技术领域,具体地说是一种计算机应用软件自纠错自重起方法。
背景技术
目前,应用软件很难避免不出现缺陷,而缺陷的出现,常常使程序不可预测地退出或无响应。遇此情况,一般的操作系统通常只能先关闭无响应的运行程序后再重新启动它。在现有技术中,视窗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[50]; 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>内部进程内设有定时器,以判断应用程序内部进程的响应,定时器是一段程序性方法,它包括向内部进程发状态报告请求信号,如果内部进程错误累计数达到一定值如10到40,本发明实施例用25时,则认为内部进程死锁,于是使外部进程的响应标志错误累计数值加1。外部监控进程定期地对内部进程发送状态报告请求,在内部进程运行正常的情况下,内部进程对外部进程所发送的状态报告请求将会做出正确和及时的反馈,当内部进程出现非正常退出或停止响应时,如果外部进程在一段时间内一直收不到反馈消息,则外部进程对内部进程发送终止消息,或杀掉内部进程,并自动建立一新的内部进程。
参阅图3,内部进程负责实际的媒体播放操作。外部进程每隔1秒钟用终止消息命令即杀函数向内部进程发一个信号,外部进程内部有一个响应标志,它为全局变量,这个变量的初值是0,外部进程每向内部进程发一次信号,这个变量的值就增加1。内部进程收到外部进程发出的信号后,也用杀函数向外部进程发出一个反馈消息,外部进程收到这个反馈消息后,就将全局变量的值清零。
如果内部进程发生了死锁即内部进程崩溃时,则外部进程向其发出的信号就无法得到反馈。如图4所示,此时,外部进程的响应标志的值就会持续增加,当这个值增加到一定程度如采用的阈值后,就认为内部进程已经失去响应,此时,就要将内部进程杀掉,并且重新建立一个内部进程。如果内部进程错误累计数值小于一定的阈值如25但超过一定的数值如15时,则让应用程序自己关闭,如果应用程序无法自动关闭,则强制将其杀掉,再启动一个新的应用程序内部进程。对内部进程死锁的处理如下<pre listing-type="program-listing"> if(nImAlive>25) { nImAlive=0; start_prog(nCurProg);∥启动一个新的应用程序 continue; } if(nImAlive>15) { nImAlive=0; nMaxTime=0; do{ if(nMaxTime>20) { kill(childpid,SIGKILL);∥尝试让应用程序自己关闭 } else { kill(childpid,SIGTERM); ∥如果应用程序无法自动关闭,则强制将其杀掉 } nMaxTime++; usleep(50); }while((nMaxTime&lt;40 )&amp;amp;&amp;amp;( errno!=ESRCH)); ∥system(″xterm″); start_prog(nCurProg); ∥启动一个新的应用程序 continue; }</pre>在每次向内部进程发消息前,外部进程还要检测一下内部进程是否存在,如果进程已经不存在了,认为这是由于程序错误导致了内部进程的退出,按照本发明的设计,只要开机,这个进程就应该一直存在。在这种情况下,外部进程就重新建立一个内部进程。
本发明对定时器触发的正确性进行测量,把它作为一种判断参数。在内部进程的内部的定时器每隔1到5秒如2秒触发一次。每次定时器触发时,都记录下触发的时间,并把这个时间存储到一个最后时间的全局变量中。在内部进程向外部进程发送的反馈消息中,就包含这个时间字串。这是因为,在有些死锁的情况下,虽然程序不能响应用户的操作,但是却能响应外部进程发来的信号。这样,对于用户来讲,内部进程已经失去响应了,而对于外部进程来讲,内部进程却没有失去响应。当程序对用户失去响应的时候,它的内部的定时器也就不会再被触发了。所以,可以通过定时器来判断程序是否已经对用户失去响应。当外部进程收到内部进程发来的信号时,它判断这个同时发来的时间字串,如果发现这个时间距当前时间已经很长,比如超过25秒,则认为内部进程已经对用户失去响应,于是,将内部进程的进程杀掉,再重建一个内部进程。
在此实施例中,本发明根据应用的特点和出错统计,简化了内部程序自身状态参数,只使用了两个参数,基本上杜绝了程序出错后导致用户无响应或程序中断的问题。在很大程度上解决了应用程序不可预测出错的问题,具有很大的实用性。
权利要求
1.一种计算机应用软件自纠错自重起方法,其特征在于该方法包括以下步骤(1)创建一个外部进程;(2)系统启动,外部进程先启动,并由外部进程来创建和启动应用软件程序的内部进程;(3)外部进程定期地对内部进程发送状态报告请求,在内部进程运行正常的情况下,内部进程对外部进程所发送的状态报告请求做出正确和及时的反馈;(4)当内部进程出现非正常退出或停止响应时,如果外部进程在一段时间内一直收不到反馈消息,则外部进程对内部进程发送终止消息或杀掉内部进程,并自动建立一新的内部进程。
2.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于所说的内部进程完成应用软件程序的主要功能和任务。
3.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于所说的外部进程负责监控内部进程的运行。
4.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于所说的外部进程包括通讯和错误判断纠错机制。
5.根据权利要求4所述的计算机应用软件自纠错自重起方法,其特征在于所说的通讯机制负责向内部进程发送请求和接收反馈,它通过消息传递方式实现内部进程和外部进程之间的消息传递。
6.根据权利要求4所述的计算机应用软件自纠错自重起方法,其特征在于所说的错误判断纠错机制负责对通讯机制接收到的内部进程反馈的消息进行分析处理。
7.根据权利要求6所述的计算机应用软件自纠错自重起方法,其特征在于所说的错误判断纠错机制进一步包括(1)判断是否能按时收到内部进程发来的反馈消息,如果长时间得不到内部进程发来的反馈消息,则检查内部进程是否还存在;(2)如果内部进程仍然存在,则认为内部进程出现了死锁,于是发出终止消息,杀掉内部进程,再重新启动一个内部进程;(3)如果内部进程已经不存在,则直接重新启动一个内部进程。
8.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于所说的内部进程内部设有定时器,用以判断应用程序内部进程的响应。
9.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于所说的外部进程定期对内部进程发送状态报告请求是指每隔一定时间向内部进程发送状态询问信号。
10.根据权利要求9所述的计算机应用软件自纠错自重起方法,其特征在于所说的每隔一定时间是1到5秒钟。
11.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于所说的外部进程内部有一个响应标志,它判断内部进程的错误累计数值,外部进程发一次状态询问信号,该响应标志的值就增加1。
12.根据权利要求8所述的计算机应用软件自纠错自重起方法,其特征在于所说的定时器进一步包括以下步骤(1)向内部进程发状态报告请求信号;(2)如果内部进程错误累计数达到一定值时,则认为内部进程死锁,使外部进程的响应标志错误累计数值加1。
13.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于在内部进程运行正常的情况下,内部进程对外部进程所发送的状态报告请求做出正确和及时的反馈是指将外部进程响应标志的错误累计数值清零。
14.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于步骤(4)进一步包括(1)如果外部进程响应标志错误累计数值超过一定的阈值,则启动一个新的应用程序内部进程;(2)如果内部进程错误累计数值小于一定的阈值但超过一定的数值时,则让应用程序自已关闭,如果应用程序无法自动关闭,则强制将其杀掉,再启动一个新的应用程序内部进程。
15.根据权利要求14所述的计算机应用软件自纠错自重起方法,其特征在于步骤(1)所说的阈值是10-40。
16.根据权利要求14所述的计算机应用软件自纠错自重起方法,其特征在于步骤(2)所说的阈值是25。
17.根据权利要求1所述的计算机应用软件自纠错自重起方法,其特征在于步骤(4)还包括将内部进程错误累计数值增加一个较大的数以迅速重新启动一个新的内部进程的步骤。
全文摘要
本发明是一种计算机应用软件自纠错自重起方法。该方法包括创建一个外部监控进程、系统启动、外部进程先启动、并由外部进程来创建和启动应用软件程序的内部进程,外部监控进程定期地对内部进程发送状态报告请求,在内部进程运行正常的情况下,内部进程对外部进程所发送的状态报告请求做出正确和及时的反馈,当内部进程出现非正常退出或停止响应时,如果外部进程在一段时间内一直收不到反馈消息,则外部进程对内部进程发送终止消息,或杀掉内部进程,并自动建立一新的内部进程的步骤。本发明可解决现有技术中程序不可预测地退出或无响应等问题,在应用软件程序内部进程出故障时不需要重新启动系统,可为用户节省大量时间。
文档编号G06F11/30GK1506826SQ0310077
公开日2004年6月23日 申请日期2003年1月29日 优先权日2002年12月9日
发明者赵明, 韩抗, 赵 明 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1