CN1262926C - 一种基于共享内存的看门狗实现方法 - Google Patents
一种基于共享内存的看门狗实现方法 Download PDFInfo
- Publication number
- CN1262926C CN1262926C CN 200310118551 CN200310118551A CN1262926C CN 1262926 C CN1262926 C CN 1262926C CN 200310118551 CN200310118551 CN 200310118551 CN 200310118551 A CN200310118551 A CN 200310118551A CN 1262926 C CN1262926 C CN 1262926C
- Authority
- CN
- China
- Prior art keywords
- controlled
- physics process
- shared drive
- house dog
- method based
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于共享内存的看门狗实现方法,包括被控物理进程每第一时间间隔向共享内存中写入第一字节标记;看门狗程序每第二时间间隔扫描一次该被控物理进程在共享内存块中对应的字节内容,如果对应字节内容与该被控物理进程写入的第一字节标记相同,则表明该被控物理进程处于运行状态,看门狗程序向该字节中写入第二字节标记;如果该被控物理进程的对应字节内容为第二字节标记,则说明该被控物理进程已经僵死或者退出,看门狗会将僵死的进程杀死,同时重新启动该被控物理进程。本发明有效地解决了代码跨平台移植问题,即可以平滑地实现在各种操作系统平台之间的移植,扩大了软件看门狗的应用范围,降低了其开发和维护成本。
Description
技术领域
本发明涉及软件看门狗监控目标资源状态的方法,尤其涉及一种基于共享内存的看门狗实现方法。
背景技术
传统的Windows平台软件看门狗一般都是通过窗口消息机制来实现看门狗与被控资源(被控资源通常情况下是以操作系统物理进程的方式存在)之间的交互,具体做法是:看门狗向被控资源发送一条监控请求消息,被控资源收到该消息后立即返回一条监控应答消息,如果看门狗在T时间段(监控超时时限)内没有收到被控资源返回的监控应答消息,此时看门狗则认为被控资源出现异常。
传统的软件看门狗监控方法存在一定的局限性:首先按照基于Windows窗口消息机制设计出来的看门狗程序在跨平台移植上就会具备较大的困难,因为UNIX、LINUX等平台不支持Windows的窗口消息机制;其次Windows窗口消息机制的具体实现为每个窗口由系统提供一个存放待处理消息的消息队列,看门狗向被控资源发送监控请求消息其实就是向被控资源的主窗口消息队列中加入并拷贝该条消息内容,被控资源主窗口从消息队列中取出监控请求消息进行处理,在被控资源负荷比较重的情况下(如处理的业务量很大),主窗口消息队列中会堆积很多待处理消息,看门狗监控请求消息夹杂在其中可能会长时间得不到处理,而引起看门狗对被监控资源的误判断(误认为被控资源处于非活动状态)。
尚未检索到能够解决上述缺陷的现有技术文献。
发明内容
本发明的目的是提供一种基于共享内存的看门狗实现方法,解决软件看门狗监控问题,即保证看门狗能够准确地获取出被控资源的状态,而不受被控资源本身的负荷情况带来误判的干扰。
共享内存技术可以在目前主流的操作系统平台(包括Windows、SunSolaris、IBM AIX、HP-UX、Linux)上实现。
本发明的目的是这样实现的:
本发明公开了一种基于共享内存的看门狗实现方法,包括如下步骤:
(1)被控物理进程每第一时间间隔向共享内存中写入第一字节标记;
(2)看门狗程序每第二时间间隔扫描一次该被控物理进程在共享内存块中对应的字节内容,根据字节内容进行相应操作;
其中,第二时间间隔值大于第一时间间隔值。
所述步骤(2)中的相应操作包括:如果对应字节内容与该被控物理进程写入的第一字节标记相同,则表明该被控物理进程处于运行状态,看门狗程序向该字节中写入第二字节标记;如果该被控物理进程的对应字节内容为第二字节标记,则说明该被控物理进程已经僵死或者退出,看门狗会将僵死的进程杀死,同时重新启动该被控物理进程;
其中,所述第一字节标记与所述第二字节标记内容不相同。
所述的基于共享内存的看门狗实现方法,还包括看门狗初始化步骤,获取被控物理进程的当前状态,如果被控物理进程处于运行或者僵死状态,则让物理进程退出或将它杀死,然后启动被控物理进程;如果被控物理进程处于非运行状态,则直接启动它。
所述共享内存中存放一控制块结构,包括:被控物理进程名称、物理进程控制块是否使用标记、被控物理进程的唯一标记、被控资源是否启动标记和心跳标记,被控物理进程初始启动时,对各个标记进行操作。
所述的基于共享内存的看门狗实现方法,被控物理进程初始启动时,对各个标记进行操作包括:物理进程控制块是否使用标记置1,被控资源是否启动标记置1。
所述的基于共享内存的看门狗实现方法,被控物理进程正常运行时,心跳标记置1。
所述的基于共享内存的看门狗实现方法,该共享内存最终的删除由操作系统回收处理,即被控物理进程和看门狗均放弃对共享内存的控制权,操作系统会将该共享内存资源释放并回收其控制权。
本发明的有益效果在于:软件看门狗采用操作系统成熟的共享内存机制来实现对被控资源的状态监测和控制,能够达到高效、准确的效果,这种监控机制不受被控资源本身负荷的影响,看门狗程序和被控资源对共享内存的存取操作都是可靠、高效和安全的,并且按照此监控机制编制出来的看门狗程序和被控资源软件可以非常平滑地进行跨平台移植,因为目前各主流操作系统均支持共享内存机制。
附图说明
图1为本发明的物理进程控制块结构TPhyPCBStruc PPCB框图;
图2为本发明的看门狗与被控资源对共享内存的操作示意图;
图3为本发明的被控资源启动时操作共享内存流程图;
图4为本发明的被控资源运行时操作共享内存流程图;
图5为本发明的看门狗获取被控资源的状态流程图;
图6为本发明的看门狗定时监控机制流程图。
具体实施方式
本发明软件看门狗的实现方法如下:
一.软件看门狗对被控物理进程(被控资源)的监控方法
1.被控物理进程每第一时间间隔t1向共享内存中写入第一字节标记tag_running;
2.看门狗程序每第二时间间隔t2扫描一次被控物理进程在共享内存块中对应的字节内容,如果对应字节内容为tag_running,则表明该物理进程处于运行状态,看门狗程序向该字节中写第二字节标记tag_stopped;如果该物理进程的对应字节内容为tag_stopped,则说明该物理进程已经僵死或者退出,看门狗会将僵死的进程杀死,同时重新启动被控物理进程;
3.为了确保检测机制的可靠性,时间t2值要求大于t1值,另外共享内存的置入标记tag_running与tag_stopped不相同,例如一个为1,另一个为0。
二.看门狗初始化
首先获取被控物理进程的当前状态,如果被控物理进程处于运行或者僵死状态,则让物理进程退出或将它杀死,然后启动被控物理进程;如果被控物理进程处于非运行状态,则直接启动它。该过程实现看门狗程序对被控资源的初始化启动过程。
三.共享内存管理
共享内存的创建是由被控物理进程进行,被控物理进程与看门狗程序均对共享内存执行相应的读写操作,共享内存最终的删除由操作系统回收处理,即被控物理进程和看门狗均放弃对共享内存的控制权,操作系统会将该共享内存资源释放并回收其控制权。
下面结合附图,基本按照附图的顺序对技术方案的实施作进一步的详细描述:
图1介绍了物理进程控制块结构TPhyPCBStruc PPCB。该结构存放在共享内存中,被看门狗程序和被控资源同时操作,结构升级其中name[40]表示被控资源(如物理进程)名称;byUse是物理进程控制块是否使用标记,0表示未使用,1表示使用;pid表示被控资源的唯一标记(如物理进程的PID);Running表示被控资源是否启动,“ACTIVE”表示已经启动,其它值表示未启动,被控资源在启动时将该字段置为“ACTIVE”值;beatFlag是看门狗监控的心跳标记,被控资源每2秒(t1)将该标记置1(tag_running),看门狗则每10秒(t2)将该标记清0(tag_stopped)。
图2介绍了看门狗程序与被控资源对共享内存PPCB的beatFlag字段操作情况。被控资源每2秒(t1)将PPCB的beatFlag字段值置1(tag_running),看门狗程序则每10秒(t2)将该字段值清0(tag_stopped)。
图3介绍了被控资源初始启动时对共享内存PPCB结构的操作情况。首先将PPCB的byUse值置1,然后将PPCB的Running值置为“ACTIVE”,接着将被控资源名称置入PPCB的name[40],最后将PPCB的pid值置为被控资源的唯一标记(如物理进程的PID)。
图4介绍了被控资源正常运行时对共享内存PPCB结构的操作情况。被控资源每2秒(t1)会将PPCB的心跳标记beatFlag置1(tag_running)。
图5介绍了看门狗获取被控资源状态的流程。首先判断PPCB的Running字段值是为“ACTIVE”,如果不是则返回STOPPED状态,如果是再进行PPCB的pid是否存在判断,如果PPCB的pid不存在则返回STOPPED状态,如果PPCB的pid存在则进行下一步的PPCB.name[40]判断,如果该名称与被控资源名称不一致,则返回STOPPED状态,如果名称一致则再进行PPCB的心跳标记beatFlag判断,如果beatFlag值为1(tag_running),则返回RUNNING状态,否则返回DEAD状态。
图6介绍了看门狗定时监控机制的实现流程。看门狗每10秒(t2)做如下监控操作:调用图5描述的流程来获取被控资源的状态,然后根据被控资源的状态(共有3种状态)分别做出处理,如果状态为STOPPED,看门狗就重新启动被控资源;如果状态为DEAD,先强行杀死被控资源,并记录异常日志,然后再重新启动被控资源;如果状态为RUNNING,看门狗则会将共享内存PPCB的心跳标记beatFlag清0(tag_stopped)。
Claims (7)
1.一种基于共享内存的看门狗实现方法,包括如下步骤:
(1)被控物理进程每第一时间间隔向共享内存中写入第一字节标记;
(2)看门狗程序每第二时间间隔扫描一次该被控物理进程在共享内存块中对应的字节内容,根据字节内容进行相应操作;
其中,所述第二时间间隔大于所述第一时间间隔;所述相应操作包括:如果对应字节内容与该被控物理进程写入的第一字节标记相同,则表明该被控物理进程处于运行状态,看门狗程序向该字节中写入第二字节标记;如果该被控物理进程的对应字节内容为第二字节标记,则说明该被控物理进程已经僵死或者退出,看门狗会将僵死的进程杀死,同时重新启动该被控物理进程。
2.如权利要求1所述的基于共享内存的看门狗实现方法,其特征在于,所述第一字节标记内容与所述第二字节标记内容不相同。
3.如权利要求1所述的基于共享内存的看门狗实现方法,其特征在于,该方法还包括看门狗初始化步骤,获取被控物理进程的当前状态,如果被控物理进程处于运行或者僵死状态,则让物理进程退出或将它杀死,然后启动被控物理进程;如果被控物理进程处于非运行状态,则直接启动它。
4.如权利要求1所述的基于共享内存的看门狗实现方法,其特征在于,所述共享内存中存放一控制块结构,包括:被控物理进程名称、物理进程控制块是否使用标记、被控物理进程的唯一标记、被控资源是否启动标记和心跳标记,被控物理进程初始启动时,对各个标记进行操作。
5.如权利要求4所述的基于共享内存的看门狗实现方法,其特征在于,被控物理进程初始启动时,对各个标记进行操作包括:物理进程控制块是否使用标记置1,被控资源是否启动标记置1。
6.如权利要求4所述的基于共享内存的看门狗实现方法,其特征在于,被控物理进程正常运行时,心跳标记置1。
7.如权利要求1所述的基于共享内存的看门狗实现方法,其特征在于,该共享内存最终的删除由操作系统回收处理,即被控物理进程和看门狗均放弃对共享内存的控制权,操作系统会将该共享内存资源释放并回收其控制权。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310118551 CN1262926C (zh) | 2003-12-12 | 2003-12-12 | 一种基于共享内存的看门狗实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310118551 CN1262926C (zh) | 2003-12-12 | 2003-12-12 | 一种基于共享内存的看门狗实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1547125A CN1547125A (zh) | 2004-11-17 |
CN1262926C true CN1262926C (zh) | 2006-07-05 |
Family
ID=34338049
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200310118551 Expired - Fee Related CN1262926C (zh) | 2003-12-12 | 2003-12-12 | 一种基于共享内存的看门狗实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1262926C (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102387040B (zh) * | 2011-11-01 | 2015-04-22 | 深圳市航天泰瑞捷电子有限公司 | 一种前置机保持高速稳定运行的方法及系统 |
CN103425562B (zh) * | 2012-05-18 | 2016-08-31 | 北京北方微电子基地设备工艺研究中心有限责任公司 | 软件断联监控系统及方法 |
CN102968352B (zh) * | 2012-12-14 | 2015-07-22 | 杨晓松 | 进程监控及多级恢复系统和方法 |
CN103036778B (zh) * | 2012-12-18 | 2018-05-01 | 上海斐讯数据通信技术有限公司 | 一种家庭网关设备中防止设备僵死的装置和方法 |
CN103744727A (zh) * | 2014-01-16 | 2014-04-23 | Tcl集团股份有限公司 | 一种启动服务的方法、装置和智能设备 |
CN106326055B (zh) * | 2016-08-29 | 2019-11-12 | 四川九洲空管科技有限责任公司 | 一种机载防撞系统的硬件死机检测及复位方法 |
CN107783844A (zh) * | 2017-10-13 | 2018-03-09 | 锐捷网络股份有限公司 | 一种计算机程序运行异常检测方法、装置和介质 |
CN109189562B (zh) * | 2018-08-09 | 2021-08-20 | 麒麟合盛网络技术股份有限公司 | 控制进程运行的方法和装置 |
-
2003
- 2003-12-12 CN CN 200310118551 patent/CN1262926C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1547125A (zh) | 2004-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1266590C (zh) | 面向构件基于系统内核的进程池/线程池管理方法 | |
CN1262926C (zh) | 一种基于共享内存的看门狗实现方法 | |
US8245239B2 (en) | Deterministic runtime execution environment and method | |
US20090125572A1 (en) | Method for managing retention of data on worm disk media based on event notification | |
US9690562B2 (en) | Detecting computing processes requiring reinitialization after a software package update | |
US20070011415A1 (en) | Apparatus and method for deterministic garbage collection of a heap memory | |
US20060143608A1 (en) | Thread monitoring using shared memory | |
CN1770157A (zh) | 效率得到提高的读取-复制更新系统和方法 | |
CN1829964A (zh) | 用于处理消息队列的方法、设备和计算机程序 | |
CN1815451A (zh) | 日志信息管理方法及系统 | |
WO2010136426A1 (en) | Power management in a virtual machine farm at the local virtual machine platform level by a platform hypervisor extended with farm management server functions | |
CN1684040A (zh) | 能够使用过去处理空间的信息处理器 | |
US20080109827A1 (en) | Method and Apparatus for Allowing Restarted Programs to Use Old Process Identifications and Thread Identifications | |
CN1740974A (zh) | 一种线程调度管理方法和系统 | |
CN1521663A (zh) | 针对实时告警管理的数据库表建模及事件处理方法 | |
CN1350228A (zh) | Windows nt进程自动保护系统 | |
US7080374B2 (en) | System and method for using native code interpretation to move threads to a safe state in a run-time environment | |
CN104731634B (zh) | 一种实时在线的分布式计算框架的实现方法 | |
US6732359B1 (en) | Application process monitor | |
CN1324481C (zh) | 一种用于网络处理器的数据老化方法 | |
CN112817933A (zh) | 一种弹性数据库连接池的管理方法及装置 | |
US6418454B1 (en) | Method and mechanism for duration-based management of temporary LOBs | |
US20230229545A1 (en) | Intelligent log analysis and retention for microservices applications | |
US8813103B1 (en) | Methods and systems for handling component-object-model communications | |
CN87106625A (zh) | 按预定顺序执行两个指令序列的方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060705 Termination date: 20131212 |