一种嵌入式linux应用进程的监控方法

文档序号:6557399阅读:237来源:国知局
专利名称:一种嵌入式linux应用进程的监控方法
技术领域
本发明涉及在嵌入式Linux应用管理子系统中对应用进程进行监控 的方法。
背景技术
在嵌入式Linux系统中,应用管理子系统的任务之一是对系统中的 应用进程进行监控,即实时地监测应用进程是否异常退出或进入死循环。 其中对应用进程异常退出进行监控的常用方法是通过定时访问Linux文 件系统中/proc目录下的进程信息文件,如果发现某应用进程(或其子进 程)ID号对应的信息文件不存在了,就先杀死与该应用程序相关的所有 进程,再根据用户配置重新启动。但是在应用进程产生的子进程中,有 些子进程会和主进程在系统中一直存在,而另外一些子进程会在系统中 运行一段时间正常退出。由于单靠访问Linux文件系统中/proc目录下的 进程信息文件是无法区分这些子进程属于以上哪种情况,因此在对应用 进程及其所有子进程都采用常规的方法进行监控时,若发现某个子进程
不存在了,而这个子进程又属于正常退出的情况,则会造成管理子系统 盲目地重启动应用进程,从而影响系统的正常运行。此外管理子系统中 还需对应用进程是否处于死循环进行监控。常用方法是定时扫描进程状 态,如果发现其CPU占用率一直很高就认为它是死循环,但该方法误判 率较高。
所以在嵌入式Linux系统应用管理子系统中,迫切需要一种切实可 行的方法来有效地监测应用进程是否异常退出或进入死循环,从而很好 地完成监控任务。

发明内容
为克服现有技术中的缺点,本发明提出的监控方法,可以有效地监 测应用进程是否异常退出或进入死循环,从而保障系统的稳定性。
本发明有两种方案,第一种方案包括以下步骤 步骤一、在系统中建立一张记录需监控的各个应用进程组信息的表;该表包含进程组个数、各个进程组的ID号、进程组中各个进程的ID号、 进程组中各个进程的对应的执行文件位置信息;所述进程组为一组功能 相关的进程;
步骤二、为应用进程建立监控注册接口和监控注销接口;
步骤三、对一应用进程和其产生所有子进程进行监控时,在应用进 程主程序段和产生子进程的程序段的入口处调用应用进程注册接口;输 入参数输入该应用进程所在的进程组的ID号;该接口将注册请求连同本 进程的ID号和输入的进程组ID号通过进程通讯机制一起发送给应用进 程管理子系统,管理子系统接收到该信息后将其插入到进程组记录表中, 从而开始对该应用进程进行监控;
步骤四、若管理子系统监测到进程组中任一进程发生异常,将杀死 该进程组中的所有进程,然后重新启动该进程组;
步骤五、不需要再对该进程进行监控时,在应用进程主程序段和产 生子进程的程序段的出口处调用应用进程注销接口;输入参数为该应用 进程所在的进程组的ID号;该接口将注销请求连同本进程的ID号和输 入的进程组ID号通过进程通讯机制一起发送给应用进程管理子系统,管 理子系统接收到该信息后根据进程ID号和进程组ID号在进程组记录表 中查找到对应的进程记录,将其删除。
上述方案中,所述记录需监控的各个应用进程组信息的表是在内存 中建立。
上述方案中的所述步骤四包括
管理子系统访问应用进程组记录表,得到需要监控的所有应用进程 的ID号;
根据文件系统/proc目录下的进程信息判断这些ID号对应的应用进 程是否存在,若存在,延时后返回到上一步;否则,根据应用进程组记 录表将不存在的进程对应的进程组中的所有应用进程都杀死; 删除进程组记录表中该进程组的所有信息; 重新启动被杀死的进程组的主进程,延时后返回。
本发明的第二种方案包括以下步骤
步骤一、在系统中建立一张记录需监控的各个应用进程组信息的表;
该表包含进程组个数、各个进程组的ID号、进程组中各个进程的ID号、 进程组中各个进程的对应的执行文件位置信息;所述进程组为一组功能 相关的进程;
步骤二、为应用进程建立监控注册接口和监控注销接口;
步骤三、对一应用进程和其产生所有子进程进行监控时,在应用进 程主程序段和产生子进程的程序段的入口处调用应用进程注册接口;输 入参数输入该应用进程所在的进程组的ID号;该接口将注册请求连同本 进程的ID号和输入的进程组ID号通过进程通讯机制一起发送给应用进 程管理子系统,管理子系统接收到该信息后将其插入到进程组记录表中, 从而开始对该应用进程进行监控;
步骤四、在进程调度中给进程加上软件狗;当时间片到而发生任务 切换就给该软件狗计数器加一,如果是因为其它系统调用而发生任务切 换就把软件狗计数器清零;当该计数器值大过一定阈值,则对该进程作 为处于死循环状态处理;
步骤五、不需要再对该进程进行监控时,在应用进程主程序段和产 生子进程的程序段的出口处调用应用进程注销接口;输入参数为该应用 进程所在的进程组的ID号;该接口将注销请求连同本进程的ID号和输 入的进程组ID号通过进程通讯机制一起发送给应用进程管理子系统,管 理子系统接收到该信息后根据进程ID号和进程组ID号在进程组记录表 中査找到对应的进程记录,将其删除。
上述方案中,所述步骤四包括
在进程状态数据结构中添加死循环看门狗计数器和死循环标志;
在产生进程函数中初始化死循环的相关变量,即先将死循环看门狗 计数器清零和将死循环标志设置为非死循环;
在进程调度函数中添加对进程死循环的判断处理,取得系统分配该 进程运行的时间片数;取得该进程实际运行的时间片数;若实际运行的 时间片数等于系统分配时间片数,该进程的死循环看门狗计数器加1, 否则重新清零;若该进程的死循环看门狗计数大于死循环阈值,则将标 志设置为死循环,否则设置为非死循环;
在进程状态数组中添加一死循环状态,当检查到进程状态的标志为 死循环时,则自动将死循环状态标志写入到文件系统/proc对应的进程状 态信息中;管理子系统的监控器在定时检査/proc下各个应用的进程状态
时,若发现某个进程的状态为死循环状态标志,就按该进程处于死循环 状态处理。
本发明在应用管理子系统和应用程序之间建立一个协作机制,应用程 序只需调用管理子系统提供的接口,则管理子系统就可有效实时地监控 到该进程或其子进程是否处于异常退出或死循环的状态,从而比较彻底 地解决了以往常规监控方法因为无法判断子进程属于正常退出还是异常 退出以及仅通过CPU占用率来监测死循环而造成的误判断问题。


图1是本发明应用管理子系统监控应用进程的总体框架图2是本发明中的监控进程异常退出的处理流程图3是本发明中的在进程调度函数中添加对进程死循环的判断处理
流程图。
具体实施例方式
本发明所述应用进程的监控方法的核心思想是对于应用进程异常 退出的监控问题,为了有效地判断子进程属于正常退出还是异常退出, 在应用管理子系统和应用程序之间建立一个协作机制。而对于应用进程
死循环的监控问题,则修改Linux内核调度来对进程是否处于死循环进 行监控。
图1是本发明应用管理子系统监控应用进程的总体框架图。在管理 子系统在对应用程序进行监控前,需在系统内存中中建立一张记录需监 控的各个应用进程组记录的表。而该表包含了进程组个数、各个进程组 的ID号、进程组中各个进程的ID号、进程组中各个进程的对应的执行 文件位置等基本信息。这里进程组的概念为一组功能相关的进程,即若 管理子系统监测到进程组中任一进程发生异常(如异常退出或死循环), 都将杀死该进程组中的所有进程,然后重新启动该进程组。 其表结构中定义的成员如下 U)链表中的进程组个数;
(2) 该链表中第一个进程组记录;
(3) 该链表中最后一个进程组记录在上面结构中进程组记录的数据结构中定义的成员如下
(1) 该进程组中记录的进程个数;
(2) 该进程组的ID号;
(3) 该进程组中第一个进程记录;
(4) 该进程组中最后一个进程记录;
(5) 指向前一个进程组记录;
(6) 指向下一个进程组记录; 在上面结构中进程记录的数据结构中定义的成员如下
(1) 该进程的PID;
(2) 该进程的执行文件的位置;
(3) 指向前一个进程记录;
(4) 指向下一个进程记录; 管理子系统要建立上述需监控的记录各个应用进程组的记录表,需
要从各个应用进程得到相关的信息,于是需为应用进程提供以下两个接 口 一是应用进程监控注册接口, 二是应用进程监控注销接口。应用管 理子系统需对一应用进程和它产生所有子进程进行监控,在应用进程主 程序段和产生子进程的程序段的入口处和出口处分别调用应用进程注册 接口和应用进程注销接口。进程组的ID号由应用程序自己定义。
RegisterProc(int GroupID)函数用于完成应用进程的监控注册功能, 其中,GroupID为进程组ID号;管理子系统得到该进程的ID号,并将 该进程ID号和输入的进程组ID号(GroupID)以及注册标记通过进程 通信机制(如消息队列) 一起发送给管理子系统的监控器。
UnRegisterProc(int GroupID)函数用于完成应用进程的监控注销功 能;管理子系统得到该进程的ID号,并将该进程ID号和输入的进程组 ID号(GroupID)以及注销标记通过进程通信机制(如消息队列) 一起 发送给管理子系统的监控器。
若管理子系统的监控器接收到应用进程的注册信息,则根据进程的 ID号在文件系统/Proc下査找到该进程的相关信息,将该信息插入进程 组记录表中,从而开始对其进程进行监控。若管理子系统的监控器接收 到应用进程的注销信息,则根据进程ID号和GroupID在进程组记录表 中查找到对应的进程记录,将其删除,从而不再对该进程进行监控。
要有效地解决对应用死循环的状态监测,需修改Linux内核,即在 进程调度中给进程加上软件狗。如果是由于时间片到而发生任务切换就
给该软件狗计数器加一,如果是因为其它系统调用而发生任务切换就把 软件狗计数器清零。当进程进入了死循环时,它不会主动让出处理权, 则每次都是时间片到后发生系统任务强制切换,这样软件狗计数器就会 不断增大。当该计数器值大过一定阈值,则判定该进程处于死循环状态。
图2是应用管理子系统监控进程异常退出的处理流程图。 该应用管理子系统访问应用进程组记录表,得到需要监控的所有应 用进程的ID号;根据文件系统/proc目录下的进程信息判断这些ID号对 应的应用进程是否存在,若存在,延时后返回到上一步,否则,根据应 用进程组记录表将不存在的进程对应的进程组中的所有应用进程都杀 死,删除进程组记录表中该进程组的所有信息,重新启动被杀死的进程 组的主进程,延时后返回。
在limix操作系统内核中增加监控进程死循环的具体处理步骤如下 步骤1在进程状态数据结构中添加死循环看门狗计数器和死循环 标志;
步骤2在产生进程函数中初始化死循环的相关变量,即先将死循环 看门狗计数器清零和将死循环标志设置为非死循环。
步骤3在进程调度函数中添加对进程死循环的判断处理,具体过程 如图3所示
(1) 取得系统分配该进程运行的时间片数S;
(2) 取得该进程实际运行的时间片数M;
(3) 若实际运行的时间片数M等于系统分配时间片数S,该进程 的死循环看门狗计数器加1,否则重新清零;
(4) 若该进程的死循环看门狗计数大于死循环阈值,则将标志设置 为死循环,否则设置为非死循环。延迟一段时间重新进入(1);
步骤4在进程状态数组中添加一死循环状态;
则在内核在检査到进程状态的标志为死循环时,则自动将"L"写入到 文件系统/proc对应的进程状态信息中。于是管理子系统的监控器在定时 检査/proc下各个应用的进程状态时,若发现某个进程的状态为"L",就 能立即判断该进程处于死循环状态。
权利要求
1、一种嵌入式LINUX应用进程的监控方法,其特征在于,包括以下步骤步骤一、在系统中建立一张记录需监控的各个应用进程组信息的表;该表包含进程组个数、各个进程组的ID号、进程组中各个进程的ID号、进程组中各个进程的对应的执行文件位置信息;所述进程组为一组功能相关的进程;步骤二、为应用进程建立监控注册接口和监控注销接口;步骤三、对一应用进程和其产生所有子进程进行监控时,在应用进程主程序段和产生子进程的程序段的入口处调用应用进程注册接口;输入参数输入该应用进程所在的进程组的ID号;该接口将注册请求连同本进程的ID号和输入的进程组ID号通过进程通讯机制一起发送给应用进程管理子系统,管理子系统接收到该信息后将其插入到进程组记录表中,从而开始对该应用进程进行监控;步骤四、若管理子系统监测到进程组中任一进程发生异常,将杀死该进程组中的所有进程,然后重新启动该进程组;步骤五、不需要再对该进程进行监控时,在应用进程主程序段和产生子进程的程序段的出口处调用应用进程注销接口;输入参数为该应用进程所在的进程组的ID号;该接口将注销请求连同本进程的ID号和输入的进程组ID号通过进程通讯机制一起发送给应用进程管理子系统,管理子系统接收到该信息后根据进程ID号和进程组ID号在进程组记录表中查找到对应的进程记录,将其删除。
2、 权利要求1所述的嵌入式LINUX应用进程的监控方法,其特征 在于,所述记录需监控的各个应用进程组信息的表是在内存中建立。
3、 权利要求1或2所述的嵌入式LINUX应用进程的监控方法,其 特征在于,所述步骤四包括管理子系统访问应用进程组记录表,得到需要监控的所有应用进程的ID号;根据文件系统/proc目录下的进程信息判断这些ID号对应的应用进 程是否存在,若存在,延时后返回到上一步;否则,根据应用进程组记 录表将不存在的进程对应的进程组中的所有应用进程都杀死;删除进程组记录表中该进程组的所有信息; 重新启动被杀死的进程组的主进程,延时后返回。
4、 一种嵌入式LINUX应用进程的监控方法,其特征在于,包括以 下步骤步骤一、在系统中建立一张记录需监控的各个应用进程组信息的表; 该表包含进程组个数、各个进程组的ID号、进程组中各个进程的ID号、 进程组中各个进程的对应的执行文件位置信息;所述进程组为一组功能 相关的进程;步骤二、为应用进程建立监控注册接口和监控注销接口;步骤三、对一应用进程和其产生所有子进程进行监控时,在应用进 程主程序段和产生子进程的程序段的入口处调用应用进程注册接口;输 入参数输入该应用进程所在的进程组的ID号;该接口将注册请求连同本 进程的ID号和输入的进程组ID号通过进程通讯机制一起发送给应用进 程管理子系统,管理子系统接收到该信息后将其插入到进程组记录表中, 从而开始对该应用进程进行监控;步骤四、在进程调度中给进程加上软件狗;当时间片到而发生任务 切换就给该软件狗计数器加一,如果是因为其它系统调用而发生任务切 换就把软件狗计数器清零;当该计数器值大过一定阈值,则对该进程作 为处于死循环状态处理;步骤五、不需要再对该进程进行监控时,在应用进程主程序段和产 生子进程的程序段的出口处调用应用进程注销接口;输入参数为该应用 进程所在的进程组的ID号;该接口将注销请求连同本进程的ID号和输 入的进程组ID号通过进程通讯机制一起发送给应用进程管理子系统,管 理子系统接收到该信息后根据进程ID号和进程组ID号在进程组记录表 中査找到对应的进程记录,将其删除。
5、 权利要求4所述的嵌入式LINUX应用进程的监控方法,其特征 在于,所述步骤四包括在进程状态数据结构中添加死循环看门狗计数器和死循环标志; 在产生进程函数中初始化死循环的相关变量,即先将死循环看门狗 计数器清零和将死循环标志设置为非死循环;在进程调度函数中添加对进程死循环的判断处理,取得系统分配该进程运行的时间片数;取得该进程实际运行的时间片数;若实际运行的 时间片数等于系统分配时间片数,该进程的死循环看门狗计数器加1, 否则重新清零;若该进程的死循环看门狗计数大于死循环阈值,则将标 志设置为死循环,否则设置为非死循环;在进程状态数组中添加一死循环状态,当检査到进程状态的标志为 死循环时,则自动将死循环状态标志写入到文件系统/proc对应的进程状 态信息中;管理子系统的监控器在定时检査/proc下各个应用的进程状态 时,若发现某个进程的状态为死循环状态标志,就按该进程处于死循环 状态处理。
全文摘要
一种嵌入式LINUX应用进程的监控方法,对于应用进程异常退出的监控问题,为了有效地判断子进程属于正常退出还是异常退出,在应用管理子系统和应用程序之间建立一个协作机制。而对于应用进程死循环的监控问题,则修改Linux内核调度来对进程是否处于死循环进行监控。应用程序只需调用管理子系统提供的接口,则管理子系统就可有效实时地监控到该进程或其子进程是否处于异常退出或死循环的状态,从而比较彻底地解决了以往常规监控方法因为无法判断子进程属于正常退出还是异常退出以及仅通过CPU占用率来监测死循环而造成的误判断问题。
文档编号G06F9/46GK101178662SQ20061006354
公开日2008年5月14日 申请日期2006年11月8日 优先权日2006年11月8日
发明者张本全, 刚 曹, 新 杨 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1