一种在软件系统中实现软件看门狗的方法及系统与流程

文档序号:24941875发布日期:2021-05-04 11:34阅读:142来源:国知局
一种在软件系统中实现软件看门狗的方法及系统与流程

本发明涉及软件服务监控技术领域,尤其涉及一种在软件系统中实现软件看门狗的方法及系统。



背景技术:

目前看门狗系统有硬件看门狗系统和软件看门狗系统。硬件看门狗系统,在系统进入不可恢复的错误时,产生中断,重启系统,主要应用于嵌入式系统。硬件看门狗系统造价高,功能单一,系统重启势必导致其他运行正常的进程终止。软件看门狗系统,大多数情况下实现方式是利用linux进程间通信的方式完成监控进程和业务进程之间的消息传递,各业务进程定时向监控进程发送心跳,证明自己处于正常运行状态。当监控进程发现某个进程长时间内没有发送心跳消息后,就此判断该进程已经挂掉,重启该进程,使系统恢复正常。由于某个进程由于正常的运行非常繁忙没时间向监控进程发送心跳消息,这种情况下,监控进程会错误的认为正常运行的程序异常退出,从而造成不必要的故障恢复。



技术实现要素:

本发明的目的在于提供一种在软件系统中实现软件看门狗的方法及系统,从而解决现有技术中存在的前述问题。

为了实现上述目的,本发明采用的技术方案如下:

一种在软件系统中实现软件看门狗的方法,包括如下步骤,

s1、启动监控进程,监控进程加载配置文件,并进入s2;若无配置文件,则自动生成默认配置文件后进入s2;

s2、加载配置文件到内存,根据配置文件将被监控的所有业务进程按照链表的形式加载到内存中的进程链表中;所述监控程序按照进程链表逐个启动各个业务进程,并在启动各个业务进程后为每个业务进程注册看门狗信息,并将看门狗信息逐一添加到与进程链表对应的看门狗信息链表中;

s3、定时循环遍历进程链表,并根据各个业务进程的存活状态,将各个业务进程的看门狗计时器清零或累加,在累加到超时时间后,重启相应的业务进程,并重新给相应的业务进程注册看门狗信息;

s4、根据看门狗信息链表循环遍历其中的各个看门狗信息,并根据看门狗信息中计时器与该看门狗信息中的超时时间之间的大小关系,确定看门狗信息对应的业务进程是否重启过及其重启次数,从而采取不同的应对策略。

优选的,所述配置文件包括业务进程的名称、业务进程是否需要启动、业务进程启动的参数和业务进程的延时时间。

优选的,业务进程的看门狗信息包括该业务进程的进程名、进程号、超时时间、存活标志和重启次数。

优选的,步骤s3具体包括如下内容,

s31、判断当前业务进程是否需要启动,若否,则进入s34;若是,则进入s32;

s32、判断当前业务进程是否已经启动,若否,则根据配置文件的延时时间进行延时后,启动该业务进程,并将该业务进程注册到看门狗信息链表中,并进入s34;若是,则进入s33;

s33、根据该业务进程的进程号获取其存活状态,若存活状态为alive,则该业务进程的看门狗计时器清零,并进入s34;若存活状态为dead,则将该业务进程表示已启动的标志位替换为false,并进入s34;

s34、判断该业务进程是否为进程链表中的最后一个业务进程,若是,则结束本次遍历,并开始下一次对进程链表的遍历;若否,则进入进程链表中下一业务进程的判断。

优选的,步骤s33中根据业务进程的进程号获取其存活状态的具体过程为,

s331、根据业务进程的进程号获取该业务进程在虚拟文件系统中的cmdline文件和stat文件的完整路径;

s332、将该业务进程的stat文件读取到内存;判断stat文件中的进程名是否与该业务进程的名称相同且判断stat文件中进程状态是否是僵尸状态;若stat文件中的进程名与该业务进程的名称相同且stat文件中进程状态不是僵尸状态,则进入s333;否则返回该业务进程的存活状态为dead;

s333、将该业务进程的cmdline文件读取到内存;判断cmdline文件中是否包含该业务进程的名字符串,若是,则返回该业务进程的存活状态为alive;若否,则返回该业务进程的存活状态为dead。

优选的,步骤s4具体包括如下内容,

s41、判断当前看门狗信息对应的业务进程的看门狗计时器是否大于当前看门狗信息中的超时时间,若是,则表示该业务进程已重启,将看门狗计时器清零,重启次数加1,并进入s42;若否,则看门狗计时器自增,进入s42;

s42、判断当前看门狗信息是否是看门狗信息链表中最后一个看门狗信息,若是,则结束本次遍历,并开始下一次对看门狗信息链表的遍历;若否,则进入看门狗信息链表中下一个看门狗信息的判断。

优选的,步骤s41中,当业务进程的重启次数超过预设重启次数时,则可通过重启系统以避免该业务进程一直重启失败,或者,停止该业务进程的启动。

本发明的目的还在于提供一种在软件系统中实现软件看门狗的系统,实现软件看门狗的系统用于实现上述任一所述的实现软件看门狗的方法,所述实现软件看门狗的系统包括,

动态配置模块;用于启动监控进程加载配置文件,根据配置文件将被监控的所有业务进程按照链表的形式加载到内存中的进程链表中;所述监控程序按照进程链表逐个启动各个业务进程,并在启动各个业务进程后为每个业务进程注册看门狗信息,并将看门狗信息逐一添加到与进程链表对应的看门狗信息链表中;

定时检测模块;用于定时循环遍历进程链表,并根据各个业务进程的存活状态,将各个业务进程的看门狗计时器清零或累加,在累加到超时时间后,重启相应的业务进程,并重新给相应的业务进程注册看门狗信息;根据看门狗信息链表循环遍历其中的各个看门狗信息,并根据看门狗信息中计时器与该看门狗信息中的超时时间之间的大小关系,确定看门狗信息对应的业务进程是否重启过及其重启次数,从而采取不同的应对策略;

进程状态查询模块;用于根据业务进程的进程号获取其存活状态。

优选的,所述动态配置模块包括两个分别用于动态开启或关闭对某个业务进程监控的接口,分别为setprocessactive接口和setprocessinactive接口;

setprocessactive接口用于动态激活业务进程,传入某业务进程的名称、业务进程启动的参数和业务进程的延时时间;该接口首先在进程链表中查找有无与该业务进程相同名称的业务进程,若无,则将该业务进程加入进程链表,并在延时时间达到后的第一次循环中启动该业务进程,注册该业务进程的看门狗信息;

setprocessinactive接口用于动态使业务进程脱离监控,传入某业务进程的名称;该接口在进程链表和看门狗信息链表中查找有无与该业务进程相同的业务进程,若有,则将该业务进程相应的标志位替换为false,不再检测该业务进程的存活状态。

优选的,当业务进程的重启次数超过预设重启次数时,则可通过重启系统以避免该业务进程一直重启失败,或者,通过动态配置模块的setprocessinactive接口停止该业务进程的启动。

本发明的有益效果是:1、通过定时检测虚拟文件系统(/proc)中进程文件状态,而不依靠进程间消息通信的方式,解决了业务进程由于运行繁忙而没向监控进程发送心跳消息导致的误重启问题。2、在解决误重启的问题的同时,减少系统开销,降低程序间的耦合。

附图说明

图1是本发明实施例中实现看门狗的方法的流程示意图;

图2是本发明实施例中循环检测各个业务进程存活状态的流程示意图;

图3是本发明实施例中根据业务进程的进程号获取其存活状态的流程示意图;

图4是本发明实施例中循环检测各个业务进程看门狗信息的流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。

实施例一

如图1所示,本实施例中,提供了一种在软件系统中实现软件看门狗的方法,包括如下步骤,

s1、启动监控进程,监控进程加载配置文件,并进入s2;若无配置文件,则自动生成默认配置文件后进入s2;

s2、加载配置文件到内存,根据配置文件将被监控的所有业务进程按照链表的形式加载到内存中的进程链表中;所述监控程序按照进程链表逐个启动各个业务进程,并在启动各个业务进程后为每个业务进程注册看门狗信息,并将看门狗信息逐一添加到与进程链表对应的看门狗信息链表中;

s3、定时循环遍历进程链表,并根据各个业务进程的存活状态,将各个业务进程的看门狗计时器清零或累加,在累加到超时时间后,重启相应的业务进程,并重新给相应的业务进程注册看门狗信息;

s4、根据看门狗信息链表循环遍历其中的各个看门狗信息,并根据看门狗信息中计时器与该看门狗信息中的超时时间之间的大小关系,确定看门狗信息对应的业务进程是否重启过及其重启次数,从而采取不同的应对策略。

本实施例中,所述配置文件包括业务进程的名称、业务进程是否需要启动、业务进程启动的参数和业务进程的延时时间。

本实施例中,假设监控进程依次启动m个业务进程,则在在启动每个业务进程后,需要分别为每个业务进程注册看门狗信息,每个看门狗信息都包括其对应的业务进程的进程名、进程号(pid)、超时时间、存活标志和重启次数。在m个业务进程中可以选择一个业务进程作为子守护进程,监控进程在监控业务进程的同时,其他进程与子守护进程互相守护,这样可以确保软件看门狗在自身异常时,能够迅速恢复,确保软件看门狗的自身可靠性。

如图2所示,本实施例中,步骤s3具体包括如下内容,

s31、判断当前业务进程是否需要启动(即判断标志位active),若否,则进入s34;若是,则进入s32;

s32、判断当前业务进程是否已经启动(即判断标志位isstarted),若否,则根据配置文件的延时时间进行延时后,启动该业务进程,并将该业务进程注册到看门狗信息链表中;若是,则进入s33;

s33、根据该业务进程的pid获取其存活状态,若存活状态为alive,则该业务进程的看门狗计时器(timetick)清零;若存活状态为dead,则将该业务进程表示已启动的标志位(标志位isstarted)替换为false;

s34、判断该业务进程是否为进程链表中的最后一个业务进程,若是,则结束本次遍历,并开始下一次对进程链表的遍历;若否,则进入进程链表中下一业务进程的判断。

如图3所示,本实施例中,步骤s33中根据业务进程的pid获取其存活状态的具体过程为,

s331、根据业务进程的进程号获取该业务进程在虚拟文件系统中的cmdline文件和stat文件的完整路径;

s332、将该业务进程的stat文件读取到内存;判断stat文件中的进程名是否与该业务进程的名称相同且判断stat文件中进程状态是否是僵尸状态;若stat文件中的进程名与该业务进程的名称相同且stat文件中进程状态不是僵尸状态,则进入s333;否则返回该业务进程的存活状态为dead;

s333、将该业务进程的cmdline文件读取到内存;判断cmdline文件中是否包含该业务进程的名字符串,若是,则返回该业务进程的存活状态为alive;若否,则返回该业务进程的存活状态为dead。

本实施例中,linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,在/proc目录下会有与进程pid一致的目录名,这个目录中包含该进程的所有信息。通过查询该目录中的信息即可获得该进程的状态信息。cmdline--启动当前进程的完整命令,僵尸进程目录中此文件不包含任何信息。stat--当前进程的的状态信息。

如图4所示,本实施例中,步骤s4具体包括如下内容,

s41、判断当前看门狗信息对应的业务进程的看门狗计时器是否大于当前看门狗信息中的超时时间,若是,则表示该业务进程已重启,将看门狗计时器清零,重启次数加1,并进入s42;若否,则看门狗计时器自增,进入s42;

s42、判断当前看门狗信息是否是看门狗信息链表中最后一个看门狗信息,若是,则结束本次遍历,并开始下一次对看门狗信息链表的遍历;若否,则进入看门狗信息链表中下一个看门狗信息的判断。

步骤s41中,当业务进程的重启次数超过预设重启次数时,则可通过重启系统以避免该业务进程一直重启失败,或者,停止该业务进程的启动。例如:系统内存不足导致的重启,可通过重启虚拟文件系统来规避;业务进程本身问题导致的重启,如果该业务并不关键,可以停止该业务进程的启动。

当业务进程的重启次数超过预设重启次数时,比如一个业务进程的不停的重启,当连续重启十次(超过预设重启次数),则导致该业务进程一直重启的原因有两个:1、系统内存不足导致业务进程启动后挂掉,则可通过重启系统以避免该业务进程一直重启失败;2、业务进程本身的问题,此时,如果该业务进程不是特别重要的业务进程,则可停止该业务进程的启动。而且,引起进程重启的原因不止上述两种原因,针对不同原因,可以采取不同策略。所述预设重启次数可以根据实际情况具体设置,以便更好的满足实际需求。

实施例二

本实施例中,提供了一种在软件系统中实现软件看门狗的系统,实现软件看门狗的系统用于实现上述所述的实现软件看门狗的方法,所述实现软件看门狗的系统包括,

动态配置模块;用于启动监控进程加载配置文件,根据配置文件将被监控的所有业务进程按照链表的形式加载到内存中的进程链表中;所述监控程序按照进程链表逐个启动各个业务进程,并在启动各个业务进程后为每个业务进程注册看门狗信息,并将看门狗信息逐一添加到与进程链表对应的看门狗信息链表中;

定时检测模块;用于定时循环遍历进程链表,并根据各个业务进程的存活状态,将各个业务进程的看门狗计时器清零或累加,在累加到超时时间后,重启相应的业务进程,并重新给相应的业务进程注册看门狗信息;根据看门狗信息链表循环遍历其中的各个看门狗信息,并根据看门狗信息中计时器与该看门狗信息中的超时时间之间的大小关系,确定看门狗信息对应的业务进程是否重启过及其重启次数,从而采取不同的应对策略;

进程状态查询模块;用于根据业务进程的pid(进程号)获取其存活状态。

本实施例中,所述动态配置模块包括两个分别用于动态开启或关闭对某个业务进程监控的接口,分别为setprocessactive接口和setprocessinactive接口;

setprocessactive接口用于动态激活业务进程,传入某业务进程的名称、业务进程启动的参数和业务进程的延时时间;该接口首先在进程链表中查找有无与该业务进程相同名称的业务进程,若无,则将该业务进程加入进程链表,并在延时时间达到后的第一次循环中启动该业务进程,注册该业务进程的看门狗信息;

setprocessinactive接口用于动态使业务进程脱离监控,传入某业务进程的名称;该接口在进程链表和看门狗信息链表中查找有无与该业务进程相同的业务进程,若有,则将该业务进程相应的标志位替换为false,不再检测该业务进程的存活状态。

本实施例中,当业务进程的重启次数超过预设重启次数时,比如一个业务进程的不停的重启,当连续重启十次(超过预设重启次数),则导致该业务进程一直重启的原因有两个:1、系统内存不足导致业务进程启动后挂掉,则可通过重启系统以避免该业务进程一直重启失败;2、业务进程本身的问题,此时,如果该业务进程不是特别重要的业务进程,则在不影响其他业务模块工作的情况下,通过动态配置模块的setprocessinactive接口,停止该业务进程的启动。而且,引起进程重启的原因不止上述两种原因,针对不同原因,采取不同策略。所述预设重启次数可以根据实际情况具体设置,以便更好的满足实际需求。

本实施例中,在许多unix计算机系统中,进程文件系统包含一个伪文件系统,该系统是启动时动态生成的,用于通过内核访问进程信息。这个文件系统通常挂载到/proc目录,由于/proc不是一个真正的文件系统,它也就不占用存储空间,只占用有限的内存。本发明提供的实现软件看门狗的系统,不需要依靠进程间消息通信(ipc),而是通过读取/proc/[pid]/目录下的状态文件,获取进程号为pid进程的存活状态。该系统在解决误重启的问题的同时,减少系统开销,降低程序间的耦合。

本实施例中,以sdkdevds进程为例说明,sdkdevds是获取设备能力的进程,当sdkdevds进程启动后,在/proc/目录下会存在一个与sdkdevds进程号一样的目录;_localmonitor监控进程在一定时间检测到sdkdevds挂掉,会重新启动sdkdevds,并注册到看门狗信息链表。

通过采用本发明公开的上述技术方案,得到了如下有益的效果:

本发明提供了一种在软件系统中实现软件看门狗的方法及系统,通过定时检测虚拟文件系统(/proc)中进程文件状态,而不依靠进程间消息通信的方式,解决了业务进程由于运行繁忙而没向监控进程发送心跳消息导致的误重启问题。在解决误重启的问题的同时,减少系统开销,降低程序间的耦合。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1