一種應(yīng)用層進(jìn)程監(jiān)控方法
【專利摘要】本發(fā)明提供了一種應(yīng)用層進(jìn)程監(jiān)控方法,在Linux嵌入式系統(tǒng)中,利用init進(jìn)程對應(yīng)用層的關(guān)鍵進(jìn)程進(jìn)行監(jiān)控,該方法中首先確定關(guān)鍵進(jìn)程,然后init進(jìn)程監(jiān)控所有進(jìn)程的狀態(tài);如果有關(guān)鍵進(jìn)程退出,則執(zhí)行重啟操作。本發(fā)明中,利用init進(jìn)程監(jiān)控應(yīng)用層進(jìn)程,當(dāng)有關(guān)鍵進(jìn)程退出后,執(zhí)行重啟操作,使退出的關(guān)鍵進(jìn)程恢復(fù)正常,避免死機(jī)。
【專利說明】一種應(yīng)用層進(jìn)程監(jiān)控方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Linux嵌入式產(chǎn)品領(lǐng)域,特別涉及對Linux應(yīng)用層的關(guān)鍵進(jìn)程進(jìn)行監(jiān)控處理的方法。
【背景技術(shù)】
[0002]應(yīng)用層是指在開放系統(tǒng)互連(OSI)模型中的最高層,為應(yīng)用程序提供服務(wù)以保證通信,但它不是進(jìn)行通信的應(yīng)用程序本身。進(jìn)程是一個可以迸發(fā)執(zhí)行的程序,在一個數(shù)據(jù)集合上的一次運(yùn)行過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位。
[0003]嵌入式產(chǎn)品軟件,在測試過程中無法測試出所有的bug,如某些很隱蔽的應(yīng)用層進(jìn)程bug可能會導(dǎo)致設(shè)備死機(jī),但是可能需要長時間運(yùn)行才能出現(xiàn)一次,在開發(fā)過程中較難出現(xiàn)。但是一旦出現(xiàn)在運(yùn)行過程中主要的業(yè)務(wù)進(jìn)程異常退出,將會造成設(shè)備死機(jī),用戶必須對設(shè)備進(jìn)行斷電、再上電,設(shè)備的業(yè)務(wù)方能恢復(fù)正常,會對用戶權(quán)益造成損害。
在Linux中,應(yīng)用層第一個進(jìn)程是init進(jìn)程,目前,Linux中的init進(jìn)程會監(jiān)控所有應(yīng)用層進(jìn)程的狀態(tài),應(yīng)用層任何進(jìn)程的退出,init進(jìn)程均會給出打印提示,但是不會采取任何實(shí)質(zhì)上的動作。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是為了實(shí)現(xiàn)及時處理嵌入式產(chǎn)品中主要的業(yè)務(wù)進(jìn)程異常退出,造成設(shè)備死機(jī)的問題,避免造成用戶權(quán)益損害,而提供的一種應(yīng)用層進(jìn)程監(jiān)控方法,通過對應(yīng)用層的主要的業(yè)務(wù)進(jìn)程異常進(jìn)行監(jiān)控,當(dāng)主要的業(yè)務(wù)進(jìn)程中出現(xiàn)有異常退出時,及時重啟恢復(fù),無須用戶手動斷電重啟,用戶感覺不到死機(jī)問題的存在,提升了用戶體驗(yàn)。
[0005]本發(fā)明的技術(shù)方案是:一種應(yīng)用層進(jìn)程監(jiān)控方法,在Linux嵌入式系統(tǒng)中,利用init進(jìn)程對應(yīng)用層的關(guān)鍵進(jìn)程進(jìn)行監(jiān)控,該方法中首先確定關(guān)鍵進(jìn)程,然后包括以下步驟:
步驟1、init進(jìn)程監(jiān)控所有進(jìn)程的狀態(tài);
步驟2、判斷是否有應(yīng)用層進(jìn)程退出,如果沒有,則轉(zhuǎn)向步驟1,否則轉(zhuǎn)向步驟3 ;
步驟3、判斷關(guān)鍵進(jìn)程是否正常運(yùn)行,如果是,則轉(zhuǎn)向步驟1,否則,轉(zhuǎn)向步驟4 ;
步驟4、執(zhí)行重啟操作。
[0006]進(jìn)一步的,上述的應(yīng)用層進(jìn)程監(jiān)控方法中:步驟3中判斷業(yè)務(wù)進(jìn)程是否正常運(yùn)行的方法為,通過查看當(dāng)前運(yùn)行的所有進(jìn)程狀態(tài),采用正則匹配查找所關(guān)注的關(guān)鍵進(jìn)程名是否存在;
如果能匹配到該關(guān)鍵進(jìn)程名,說明該關(guān)鍵進(jìn)程運(yùn)行正常;否則說明運(yùn)行不正常。
[0007]本發(fā)明中,利用init進(jìn)程監(jiān)控應(yīng)用層進(jìn)程,當(dāng)有關(guān)鍵進(jìn)程退出后,執(zhí)行重啟操作,使退出的關(guān)鍵進(jìn)程恢復(fù)正常。
[0008]下面結(jié)合具體實(shí)施例對本發(fā)明作較為詳細(xì)的描述?!緦@綀D】
【附圖說明】
[0009]圖1是本發(fā)明的整體流程圖。
【具體實(shí)施方式】
[0010]實(shí)施例1,本實(shí)施例是一種應(yīng)用層進(jìn)程監(jiān)控方法,在Linux嵌入式系統(tǒng)中,利用init進(jìn)程對應(yīng)用層的關(guān)鍵進(jìn)程進(jìn)行監(jiān)控,該方法中首先確定關(guān)鍵進(jìn)程,然后包括以下步驟:如圖1所示。
[0011]步驟1、init進(jìn)程監(jiān)控所有進(jìn)程的狀態(tài)。對于Linux系統(tǒng)的運(yùn)行來說,init程序是應(yīng)用層運(yùn)行的第一個程序,應(yīng)用層任何進(jìn)程的退出,init進(jìn)程均會給出打印提示,但是不會采取任何實(shí)質(zhì)上的動作。
[0012]步驟2、判斷是否有應(yīng)用層進(jìn)程退出,如果沒有,則轉(zhuǎn)向步驟1,否則轉(zhuǎn)向步驟3; 步驟3、判斷關(guān)鍵進(jìn)程是否退出,如果是,則轉(zhuǎn)向步驟4,否則,轉(zhuǎn)向步驟I ;
步驟4、執(zhí)行重啟操作。[0013]由于init進(jìn)程是Linux應(yīng)用層拉起來的第一個進(jìn)程,此進(jìn)程掛掉,設(shè)備必然會重啟,所以在Busybox的init進(jìn)程實(shí)現(xiàn)所有的應(yīng)用層關(guān)鍵進(jìn)程監(jiān)控機(jī)制是最為可靠的。
[0014]本實(shí)施例對Linux應(yīng)用層中關(guān)鍵進(jìn)程進(jìn)行監(jiān)控,發(fā)現(xiàn)關(guān)鍵業(yè)務(wù)進(jìn)程退出時執(zhí)行自動重啟操作,提升產(chǎn)品穩(wěn)定性及用戶體驗(yàn)。
[0015]具體步驟:
1,init進(jìn)程中會監(jiān)控所有進(jìn)程的狀態(tài),若退出會進(jìn)入特定分支
/氺 Wait for a child process to exit 氺/
wpid = wait(NULL);
while (wpid > 0) {
……/*有進(jìn)程退出時會進(jìn)入此部分代碼*/
}
2,判斷退出的進(jìn)程是否為產(chǎn)品關(guān)注的關(guān)鍵進(jìn)程。該步驟就是通過查看關(guān)鍵進(jìn)程是否還在正常運(yùn)行的進(jìn)程中,具體如下:
判斷業(yè)務(wù)進(jìn)程是否正常運(yùn)行的方法為,通過“ps -ax “命令查看當(dāng)前運(yùn)行的所有進(jìn)程狀態(tài),進(jìn)一步在“ps -ax “命令的輸出中,通過正則匹配查找所關(guān)注的關(guān)鍵進(jìn)程名(對于軟件而言,進(jìn)程名實(shí)質(zhì)上為一個字符串)是否存在。
[0016]如果能匹配到該關(guān)鍵進(jìn)程名,說明關(guān)鍵進(jìn)程運(yùn)行正常;否則說明運(yùn)行不正常。
[0017]3,如果是關(guān)鍵進(jìn)程退出了,執(zhí)行重啟操作,否則忽略此次監(jiān)控信息。
【權(quán)利要求】
1.一種應(yīng)用層進(jìn)程監(jiān)控方法,在Linux嵌入式系統(tǒng)中,利用init進(jìn)程對應(yīng)用層的關(guān)鍵進(jìn)程進(jìn)行監(jiān)控,其特征在于:該方法中首先確定關(guān)鍵進(jìn)程,然后包括以下步驟: 步驟1、init進(jìn)程監(jiān)控所有進(jìn)程的狀態(tài); 步驟2、判斷是否有應(yīng)用層進(jìn)程退出,如果沒有,則轉(zhuǎn)向步驟1,否則轉(zhuǎn)向步驟3 ; 步驟3、判斷關(guān)鍵進(jìn)程是否正常運(yùn)行,如果是,則轉(zhuǎn)向步驟1,否則,轉(zhuǎn)向步驟4 ; 步驟4、執(zhí)行重啟操作。
2.根據(jù)權(quán)利要求1所述的應(yīng)用層進(jìn)程監(jiān)控方法,其特征在于:步驟3中判斷業(yè)務(wù)進(jìn)程是否正常運(yùn)行的方法為,通過查看當(dāng)前運(yùn)行的所有進(jìn)程狀態(tài),采用正則匹配查找所關(guān)注的關(guān)鍵進(jìn)程名是否存在; 如果能匹配到該關(guān)鍵進(jìn)程名,說明該關(guān)鍵進(jìn)程運(yùn)行正常;否則說明運(yùn)行不正常。
【文檔編號】G06F11/30GK103514076SQ201310412106
【公開日】2014年1月15日 申請日期:2013年9月11日 優(yōu)先權(quán)日:2013年9月11日
【發(fā)明者】楊尉, 宋海波, 袁培峰 申請人:深圳市共進(jìn)電子股份有限公司