欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于Linux操作系統(tǒng)的子進程監(jiān)控方法

文檔序號:6575204閱讀:211來源:國知局
專利名稱:基于Linux操作系統(tǒng)的子進程監(jiān)控方法
技術(shù)領(lǐng)域
本發(fā)明涉及進程監(jiān)控領(lǐng)域,特別是涉及一種基于Linux操作系統(tǒng) 的子進程監(jiān)控方法。
背景技術(shù)
服務(wù)子進程是具有特定功能的程序而不是Linux內(nèi)核的組成部 分。服務(wù)子進程通常在系統(tǒng)引導時啟動,并且在Linux操作系統(tǒng)運 行時持續(xù)運行。Init進程是系統(tǒng)引導后第一個要運行的進程,是所 有服務(wù)子進程的父進程。常見的服務(wù)子進程包括打印子進程、文件 處理子進程、管理數(shù)據(jù)庫子進程、電子郵件子進程和網(wǎng)絡(luò)子進程等。 系統(tǒng)運行過程中遇到未知問題或錯誤會導致這些服務(wù)子進程意外退 出。這時需要人為啟動這些退出的服務(wù)子進程,否則退出的進程不 能恢復運行。
現(xiàn)在, 一般采用以下方法解決上述問題設(shè)置監(jiān)控進程,該監(jiān)控 進程采用不間斷輪詢的方式檢查服務(wù)子進程是否運行,如果設(shè)置監(jiān) 控進程檢查出某一服務(wù)子進程沒有運行就重新啟動該服務(wù)子進程, 具體流程如圖1所示。雖然這種方法能解決服務(wù)子進程意外退出的 問題,但是采用監(jiān)控進程對各個進程進行不間斷輪詢檢查不僅會耗 費大量的系統(tǒng)資源,而且還不能實現(xiàn)實時啟動意外退出的服務(wù)子進 程。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種基于Linux操作系統(tǒng)的子進程監(jiān)控 方法,能對子進程的退出進行監(jiān)控,實現(xiàn)退出子進程的重新啟動, 節(jié)省系統(tǒng)資源。本發(fā)明提供的基于L i nux操作系統(tǒng)的子進程監(jiān)控方法,操作系統(tǒng) 啟動后,加載任務(wù)列表,執(zhí)行所述任務(wù)列表中的任務(wù),還包括步驟
A、 為需要監(jiān)控的子進程建立記載該子進程所分配的pid的pid 文件;
B、 判斷接收到子進程退出信號SIGCHLD時取得所述子進程的
pid;
C、 比較所取得的子進程的pid與建立的pid文件中記載的pid, 當二者一致時獲取該pid文件的名稱;
D、 獲取重啟動配置文件中記錄的所述pid文件名稱對應的控制 腳本名稱;
E、 執(zhí)行所述控制腳本名稱對應的控制腳本,生成并執(zhí)行重啟動 子進程的任務(wù)。
由上可知,采用上述步驟能對子進程的退出進行監(jiān)控,實現(xiàn)退出 子進程的重新啟動,相對于背景技術(shù)輪詢方式,節(jié)省系統(tǒng)資源,且 可實現(xiàn)實時的重啟動。
其中,所述步驟A包括子步驟
Al、建立啟動的所要監(jiān)控的子進程對應的pid文件;
A2、取得當前啟動子進程的pid;
A3、 ^!奪所述pid寫入對應的pid文寸牛。
由上可知,釆用上述步驟可以快速實現(xiàn)為需要進行監(jiān)控的子進程 建立包含所分配的pid的pid文件。
其中,步驟B所述判斷接收到子進程退出信號SIGCHLD是由init 進程判斷;
所述取得所述子進程的pid是由init進程調(diào)用的wait系統(tǒng)函K 進行取得。
由上可知,采用上述步驟可以實時監(jiān)控子進程的退出情況。 其中,步驟A所建立的pid文件存儲在/var/run目錄下; 步驟C包括子步驟
將所取得的子進程的pid與/var/run目錄下各個pid文件所包含的pid進行比較;
比較結(jié)果相同時,獲取所述pid文件名稱。
由上可知,采用上述步驟可以方便快捷的獲取pid對于的pid 文件名稱。
其中,步驟D所述重啟動配置文件存儲在/etc/init.d目錄下, 至少包括以下字段
Pid文件名稱、控制腳本名稱。
由上可知,采用上述重啟動配置文件可以靈活設(shè)置需要進行監(jiān)控 的子進程。
其中,步驟E所述執(zhí)行成重啟動的任務(wù)包括生成新pid文件的子 步驟
El、刪除pid文件名稱對應的pid文件;E2、建立重啟動的子進 程對應的pid文件;E3、取得當前啟動子進程的pid; E4、將所述 pid寫入對應的pid文件。
由上可知,采用上述步驟可以刪除退出子進程的pid文件,為重 啟動的子進程建立新的pid文件,有利于對重啟動的子進程進行退 出監(jiān)控。
由上可知,采用上述步驟便于快速執(zhí)行重啟動任務(wù)。
較佳的,步驟E之后還包括根據(jù)控制腳本銷毀退出的所述子進程。
由上可知,采用上述步驟可以減少不必要的資源浪費,提高系統(tǒng) 運行速度。


圖1為現(xiàn)有技術(shù)中采用監(jiān)控進程輪詢監(jiān)控服務(wù)子進程的流程圖; 圖2為本發(fā)明提供的基于Linux操作系統(tǒng)的子進程監(jiān)控方法的流
程圖3為重啟動配置文件的結(jié)構(gòu)示意圖4為pid文件、重啟動配置文件和控制腳本文件的對應關(guān)系示意圖。
具體實施例方式
本發(fā)明提供的基于L i nux操作系統(tǒng)的子進程監(jiān)控方法的流程,如 圖2所示,包括步驟
步驟201、啟動系統(tǒng)(開始)。
步驟202、系統(tǒng)進行初始化設(shè)置,包括初始化控制臺、設(shè)置終端 屬性、設(shè)置系統(tǒng)環(huán)境變量、屏蔽和接管信號等操作。
步驟203、解析啟動配置文件inittab,加載init進程啟動時需 要運行的任務(wù),生成任務(wù)列表。任務(wù)結(jié)構(gòu)體如下
char terminal [C0NS0LE-BUFF-SIZE]; 當前任務(wù)的輸出控制臺
步驟204、執(zhí)行任務(wù)列表中的任務(wù),啟動各子進程,根據(jù)控制腳 本生成需要進行監(jiān)控的子進程對應的pid文件,并建立在/var/run 目錄下。
其中,pid文件的建立方法為通過調(diào)用pidof ( linux系統(tǒng)標 準的命令)取得給當前啟動的子進程分配的pid (進程標識符),將 pid寫入對應pid文件。pid文件的命名規(guī)則是自定義名稱(通常是 任務(wù)名稱).pid(該處命名規(guī)則中的"pid"表示文件的后綴名)。例 如當前啟動的子進程是ftp服務(wù)子進程,其啟動時分配給ftp服務(wù) 子進程的pid是843,則該子進程的pid文件名稱為ftp. pid,文件 的內(nèi)容是843。如果子進程為多進程服務(wù),則將每個進程的pid用空 格分隔保存在同一個pid文件中。
步驟205、刪除任務(wù)列表中的已執(zhí)行的任務(wù)。這樣可以避免任務(wù)
的重復執(zhí)行,節(jié)省系統(tǒng)資源。
步驟206、 init進程等待子程退出,當有任意子進程退出時,init
struct init—action { struct init_action *next; int action; pid—t pid;
char command [INIT-BUFFS —SIZE];
當前任務(wù)命令執(zhí)行全路徑
單鏈表next指針 當前任務(wù)類型 當前任務(wù)pid進程就會接收到SIGCHLD信號(SIGCHLD信號為子進程退出信號,是 子進程結(jié)束時,向內(nèi)核發(fā)送的信號)。如果接收到子進程退出信號, 進入步驟207,否則重復步驟206。
步驟207、調(diào)用wait系統(tǒng)函數(shù),由wait系統(tǒng)函數(shù)取得所述退出 子進程的pid。
步驟208、比較wait系統(tǒng)函數(shù)取得的退出子進程的pid和pid 文件列表中各pid文件中的pid。 pid文件列表保存在/var/run目 錄下,如圖4所示。如果兩者pid—致,說明是建立當前的pid文 件的子進程退出,進入步驟209。如果不一致,進入步驟206。 步驟209、記錄退出子進程的pid對應的pid文件名稱。 步驟210、通過逐行比較pid文件的名稱和重啟動配置文件的關(guān) 鍵字段1獲取pid文件的名稱對應的控制腳本名稱,即重啟動配置 文件的關(guān)鍵字段3。重啟動配置文件列表通常被保存在/etc/init. d 目錄下,如圖3示出了重啟動配置文件的結(jié)構(gòu),包括pid文件名稱 (關(guān)鍵字段1 ):功能擴展字(關(guān)鍵字段2 ):控制腳本名稱(關(guān)鍵 字段3)。圖4示出了重啟動配置文件、pid文件列表、腳本控制列 表的關(guān)系。
步驟211、執(zhí)行獲取的控制腳本名稱對應的控制腳本,生成重新 啟動的任務(wù),執(zhí)行任務(wù)生成新的子進程,重建相對應的pid文件。 重新啟動的任務(wù)結(jié)構(gòu)體如下
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指針 當前任務(wù)類型 當前任務(wù)pid 當前任務(wù)命令執(zhí)行全路徑 當前任務(wù)的輸出控制臺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、根據(jù)控制腳本銷毀退出子進程,釋放退出子進程所占 用的資源。本步驟回收資源是為了避免造成不必要的資源浪費。
本發(fā)明中的每一個需要進行退出監(jiān)控的子進程對應 一個獨立的 控制腳本??刂颇_本通常保存在/etc目錄下??刂颇_本包括三個功 能模塊啟動功能模塊、退出功能模塊和重啟動功能模塊。系統(tǒng)啟 動的時候調(diào)用控制腳本中的啟動功能模塊,重啟動的時候調(diào)用控制 腳本中的重啟動功能模塊。
以下以ntp子進程為例i兌明ntp子進程的控制腳本的編寫過程。
步驟1,確定ntp任務(wù)的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子進程 設(shè)置為需要進行監(jiān)控的子進程。
以上所述僅 為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明, 凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進 等,均應包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種基于Linux操作系統(tǒng)的子進程監(jiān)控方法,操作系統(tǒng)啟動后,加載任務(wù)列表,執(zhí)行所述任務(wù)列表中的任務(wù),其特征在于,還包括步驟A、為需要監(jiān)控的子進程建立記載該子進程所分配的pid的pid文件;B、判斷接收到子進程退出信號SIGCHLD時取得所述子進程的pid;C、比較所取得的子進程的pid與建立的pid文件中記載的pid,當二者一致時獲取該pid文件的名稱;D、獲取重啟動配置文件中記錄的所述pid文件名稱對應的控制腳本名稱;E、執(zhí)行所述控制腳本名稱對應的控制腳本,生成并執(zhí)行重啟動子進程的任務(wù)。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A包括 子步驟Al、建立啟動的所要監(jiān)控的子進程對應的pid文件; A2、取得當前啟動所述子進程的pid; A3、將所述pid寫入對應的pid文件。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟B所述判斷 接收到子進程退出信號SIGCHLD是由init進程判斷;所述取得所述子進程的pid是由init進程調(diào)用的wait系統(tǒng)函數(shù)進 行取得。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于, 步驟A所建立的pid文件存儲在/var/run目錄下; 步驟C包括子步驟將所取得的子進程的pid與/var/run目錄下各個pid文件所包含的 pid進行比較;比較結(jié)果相同時,獲取所述pid文件名稱。
5. 根據(jù)權(quán)利要求1或4所述的方法,其特征在于,步驟D所述 重啟動配置文件存儲在/etc/init.d目錄下,至少包括以下字段pid文件名稱、控制腳本名稱。
6. 根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟E所述執(zhí)行 重啟動子進程的任務(wù)包括生成新pid文件的子步驟El、刪除pid文件名稱對應的pid文件; E2、建立重啟動的子進程對應的pid文件; E3、取得當前重啟動的子進程的pid; E4、將所述pid寫入對應的pid文件。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,步驟E之后還包括根據(jù)控制腳本銷毀退出的所述子進程。
全文摘要
本發(fā)明提供的基于Linux操作系統(tǒng)的子進程監(jiān)控方法,在操作系統(tǒng)啟動后,加載任務(wù)列表,執(zhí)行所述任務(wù)列表中的任務(wù),還包括步驟為需要進行監(jiān)控的子進程建立包含所分配的pid的pid文件;判斷接收到子進程退出信號SIGCHLD時取得所述子進程的pid;判斷所取得的子進程的pid與建立的所述pid文件中的pid一致時獲取所述子進程的pid對應的pid文件名稱;獲取pid文件名稱對應的重啟動配置文件中的控制腳本名稱;執(zhí)行控制腳本名稱對應的控制腳本,生成并執(zhí)行重啟動子進程的任務(wù)。本發(fā)明提供的基于Linux操作系統(tǒng)的子進程監(jiān)控方法,能對子進程的退出進行監(jiān)控,實現(xiàn)退出子進程的重新啟動,節(jié)省系統(tǒng)資源。
文檔編號G06F9/445GK101630262SQ200910089410
公開日2010年1月20日 申請日期2009年7月17日 優(yōu)先權(quán)日2009年7月17日
發(fā)明者裴文浩 申請人:北京數(shù)帥科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
抚顺市| 万山特区| 双江| 项城市| 丰都县| 高尔夫| 余庆县| 临西县| 兴义市| 武威市| 丹巴县| 民和| 临城县| 伊通| 黎城县| 宁海县| 收藏| 庆元县| 衡山县| 娱乐| 祥云县| 昌江| 大足县| 营口市| 泸州市| 自贡市| 贵定县| 巩留县| 右玉县| 满洲里市| 辽中县| 石渠县| 开平市| 贵州省| 南投市| 溆浦县| 平顶山市| 兴城市| 达拉特旗| 大宁县| 亳州市|