基于Linux操作系统的子进程监控方法

文档序号:6575204阅读:174来源:国知局
专利名称:基于Linux操作系统的子进程监控方法
技术领域
本发明涉及进程监控领域,特别是涉及一种基于Linux操作系统 的子进程监控方法。
背景技术
服务子进程是具有特定功能的程序而不是Linux内核的组成部 分。服务子进程通常在系统引导时启动,并且在Linux操作系统运 行时持续运行。Init进程是系统引导后第一个要运行的进程,是所 有服务子进程的父进程。常见的服务子进程包括打印子进程、文件 处理子进程、管理数据库子进程、电子邮件子进程和网络子进程等。 系统运行过程中遇到未知问题或错误会导致这些服务子进程意外退 出。这时需要人为启动这些退出的服务子进程,否则退出的进程不 能恢复运行。
现在, 一般采用以下方法解决上述问题设置监控进程,该监控 进程采用不间断轮询的方式检查服务子进程是否运行,如果设置监 控进程检查出某一服务子进程没有运行就重新启动该服务子进程, 具体流程如图1所示。虽然这种方法能解决服务子进程意外退出的 问题,但是采用监控进程对各个进程进行不间断轮询检查不仅会耗 费大量的系统资源,而且还不能实现实时启动意外退出的服务子进 程。

发明内容
有鉴于此,本发明提供了一种基于Linux操作系统的子进程监控 方法,能对子进程的退出进行监控,实现退出子进程的重新启动, 节省系统资源。本发明提供的基于L i nux操作系统的子进程监控方法,操作系统 启动后,加载任务列表,执行所述任务列表中的任务,还包括步骤
A、 为需要监控的子进程建立记载该子进程所分配的pid的pid 文件;
B、 判断接收到子进程退出信号SIGCHLD时取得所述子进程的
pid;
C、 比较所取得的子进程的pid与建立的pid文件中记载的pid, 当二者一致时获取该pid文件的名称;
D、 获取重启动配置文件中记录的所述pid文件名称对应的控制 脚本名称;
E、 执行所述控制脚本名称对应的控制脚本,生成并执行重启动 子进程的任务。
由上可知,采用上述步骤能对子进程的退出进行监控,实现退出 子进程的重新启动,相对于背景技术轮询方式,节省系统资源,且 可实现实时的重启动。
其中,所述步骤A包括子步骤
Al、建立启动的所要监控的子进程对应的pid文件;
A2、取得当前启动子进程的pid;
A3、 ^!夺所述pid写入对应的pid文寸牛。
由上可知,釆用上述步骤可以快速实现为需要进行监控的子进程 建立包含所分配的pid的pid文件。
其中,步骤B所述判断接收到子进程退出信号SIGCHLD是由init 进程判断;
所述取得所述子进程的pid是由init进程调用的wait系统函K 进行取得。
由上可知,采用上述步骤可以实时监控子进程的退出情况。 其中,步骤A所建立的pid文件存储在/var/run目录下; 步骤C包括子步骤
将所取得的子进程的pid与/var/run目录下各个pid文件所包含的pid进行比较;
比较结果相同时,获取所述pid文件名称。
由上可知,采用上述步骤可以方便快捷的获取pid对于的pid 文件名称。
其中,步骤D所述重启动配置文件存储在/etc/init.d目录下, 至少包括以下字段
Pid文件名称、控制脚本名称。
由上可知,采用上述重启动配置文件可以灵活设置需要进行监控 的子进程。
其中,步骤E所述执行成重启动的任务包括生成新pid文件的子 步骤
El、删除pid文件名称对应的pid文件;E2、建立重启动的子进 程对应的pid文件;E3、取得当前启动子进程的pid; E4、将所述 pid写入对应的pid文件。
由上可知,采用上述步骤可以删除退出子进程的pid文件,为重 启动的子进程建立新的pid文件,有利于对重启动的子进程进行退 出监控。
由上可知,采用上述步骤便于快速执行重启动任务。
较佳的,步骤E之后还包括根据控制脚本销毁退出的所述子进程。
由上可知,采用上述步骤可以减少不必要的资源浪费,提高系统 运行速度。


图1为现有技术中采用监控进程轮询监控服务子进程的流程图; 图2为本发明提供的基于Linux操作系统的子进程监控方法的流
程图3为重启动配置文件的结构示意图4为pid文件、重启动配置文件和控制脚本文件的对应关系示意图。
具体实施例方式
本发明提供的基于L i nux操作系统的子进程监控方法的流程,如 图2所示,包括步骤
步骤201、启动系统(开始)。
步骤202、系统进行初始化设置,包括初始化控制台、设置终端 属性、设置系统环境变量、屏蔽和接管信号等操作。
步骤203、解析启动配置文件inittab,加载init进程启动时需 要运行的任务,生成任务列表。任务结构体如下
char terminal [C0NS0LE-BUFF-SIZE]; 当前任务的输出控制台
步骤204、执行任务列表中的任务,启动各子进程,根据控制脚 本生成需要进行监控的子进程对应的pid文件,并建立在/var/run 目录下。
其中,pid文件的建立方法为通过调用pidof ( linux系统标 准的命令)取得给当前启动的子进程分配的pid (进程标识符),将 pid写入对应pid文件。pid文件的命名规则是自定义名称(通常是 任务名称).pid(该处命名规则中的"pid"表示文件的后缀名)。例 如当前启动的子进程是ftp服务子进程,其启动时分配给ftp服务 子进程的pid是843,则该子进程的pid文件名称为ftp. pid,文件 的内容是843。如果子进程为多进程服务,则将每个进程的pid用空 格分隔保存在同一个pid文件中。
步骤205、删除任务列表中的已执行的任务。这样可以避免任务
的重复执行,节省系统资源。
步骤206、 init进程等待子程退出,当有任意子进程退出时,init
struct init—action { struct init_action *next; int action; pid—t pid;
char command [INIT-BUFFS —SIZE];
当前任务命令执行全路径
单链表next指针 当前任务类型 当前任务pid进程就会接收到SIGCHLD信号(SIGCHLD信号为子进程退出信号,是 子进程结束时,向内核发送的信号)。如果接收到子进程退出信号, 进入步骤207,否则重复步骤206。
步骤207、调用wait系统函数,由wait系统函数取得所述退出 子进程的pid。
步骤208、比较wait系统函数取得的退出子进程的pid和pid 文件列表中各pid文件中的pid。 pid文件列表保存在/var/run目 录下,如图4所示。如果两者pid—致,说明是建立当前的pid文 件的子进程退出,进入步骤209。如果不一致,进入步骤206。 步骤209、记录退出子进程的pid对应的pid文件名称。 步骤210、通过逐行比较pid文件的名称和重启动配置文件的关 键字段1获取pid文件的名称对应的控制脚本名称,即重启动配置 文件的关键字段3。重启动配置文件列表通常被保存在/etc/init. d 目录下,如图3示出了重启动配置文件的结构,包括pid文件名称 (关键字段1 ):功能扩展字(关键字段2 ):控制脚本名称(关键 字段3)。图4示出了重启动配置文件、pid文件列表、脚本控制列 表的关系。
步骤211、执行获取的控制脚本名称对应的控制脚本,生成重新 启动的任务,执行任务生成新的子进程,重建相对应的pid文件。 重新启动的任务结构体如下
struct init—action { struct init—action *next; int action; pid-t pid;
char command[INIT—BUFFS—SIZE]; char terminal [CONSOLE-BUFF-SIZE]
其中,
next成员为NUIXj
单链表next指针 当前任务类型 当前任务pid 当前任务命令执行全路径 当前任务的输出控制台act ion成员为ONCE; pid成员为0;
command成员为控制脚本全路径/脚本名称。以ntp子进程为例 其控制脚本全J各径为/etc/init. d/ntp. sh
Terminal成员为子进程控制台。默认为/dev/console
其中,重建相对应的pid文件包括步骤1、删除pid文件名称 对应的pid文件;2、建立重启动的子进禾呈对应的pid文件;3、取 得当前启动子进程的pid; 4、将所述pid写入对应的pid文件。
步骤212、根据控制脚本销毁退出子进程,释放退出子进程所占 用的资源。本步骤回收资源是为了避免造成不必要的资源浪费。
本发明中的每一个需要进行退出监控的子进程对应 一个独立的 控制脚本。控制脚本通常保存在/etc目录下。控制脚本包括三个功 能模块启动功能模块、退出功能模块和重启动功能模块。系统启 动的时候调用控制脚本中的启动功能模块,重启动的时候调用控制 脚本中的重启动功能模块。
以下以ntp子进程为例i兌明ntp子进程的控制脚本的编写过程。
步骤1,确定ntp任务的pid文件名称ntp. pid和控制脚本名 称ntp. sh。
步骤2,编写ntp控制脚本的功能。控制脚本实例如下 #!/bin/sh
# description: Starts and stops the ntp daemons \
# used to provide ntp services.
#
# pidfile: /var/run/ntp.pid
# Const
PIDPATH=/var/rim
PRGNAME=ntp
SRVNAME=ntp# Source function library. ./etc/init.d/vstfunc
# Check that ntp.conf exists. II exit 0
# Function s U r t 0 {
#check program checkonly $PRGNAME if [ $ -eq 0 ]; then exit 0
f i
sleep 3
/usr/sbin/$PRGMME sleep 3 return $
stop() {
killproc $PRGNAME return $
restart () { s top start
# Select case "$1" in
start)
starts top)
s top
restart)
restart
承)
echo $"Usage: $0 {start Istoplrestart" exi t 1
6sac exit $
添加ntp: : ntp. sh到重启动配置文件目录下,即可将ntp子进程 设置为需要进行监控的子进程。
以上所述仅 为本发明的较佳实施例而已,并不用以限制本发明, 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进 等,均应包含在本发明的保护范围之内。
权利要求
1.一种基于Linux操作系统的子进程监控方法,操作系统启动后,加载任务列表,执行所述任务列表中的任务,其特征在于,还包括步骤A、为需要监控的子进程建立记载该子进程所分配的pid的pid文件;B、判断接收到子进程退出信号SIGCHLD时取得所述子进程的pid;C、比较所取得的子进程的pid与建立的pid文件中记载的pid,当二者一致时获取该pid文件的名称;D、获取重启动配置文件中记录的所述pid文件名称对应的控制脚本名称;E、执行所述控制脚本名称对应的控制脚本,生成并执行重启动子进程的任务。
2. 根据权利要求1所述的方法,其特征在于,所述步骤A包括 子步骤Al、建立启动的所要监控的子进程对应的pid文件; A2、取得当前启动所述子进程的pid; A3、将所述pid写入对应的pid文件。
3. 根据权利要求1所述的方法,其特征在于,步骤B所述判断 接收到子进程退出信号SIGCHLD是由init进程判断;所述取得所述子进程的pid是由init进程调用的wait系统函数进 行取得。
4. 根据权利要求1所述的方法,其特征在于, 步骤A所建立的pid文件存储在/var/run目录下; 步骤C包括子步骤将所取得的子进程的pid与/var/run目录下各个pid文件所包含的 pid进行比较;比较结果相同时,获取所述pid文件名称。
5. 根据权利要求1或4所述的方法,其特征在于,步骤D所述 重启动配置文件存储在/etc/init.d目录下,至少包括以下字段pid文件名称、控制脚本名称。
6. 根据权利要求1所述的方法,其特征在于,步骤E所述执行 重启动子进程的任务包括生成新pid文件的子步骤El、删除pid文件名称对应的pid文件; E2、建立重启动的子进程对应的pid文件; E3、取得当前重启动的子进程的pid; E4、将所述pid写入对应的pid文件。
7. 根据权利要求6所述的方法,其特征在于,步骤E之后还包括根据控制脚本销毁退出的所述子进程。
全文摘要
本发明提供的基于Linux操作系统的子进程监控方法,在操作系统启动后,加载任务列表,执行所述任务列表中的任务,还包括步骤为需要进行监控的子进程建立包含所分配的pid的pid文件;判断接收到子进程退出信号SIGCHLD时取得所述子进程的pid;判断所取得的子进程的pid与建立的所述pid文件中的pid一致时获取所述子进程的pid对应的pid文件名称;获取pid文件名称对应的重启动配置文件中的控制脚本名称;执行控制脚本名称对应的控制脚本,生成并执行重启动子进程的任务。本发明提供的基于Linux操作系统的子进程监控方法,能对子进程的退出进行监控,实现退出子进程的重新启动,节省系统资源。
文档编号G06F9/445GK101630262SQ200910089410
公开日2010年1月20日 申请日期2009年7月17日 优先权日2009年7月17日
发明者裴文浩 申请人:北京数帅科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1