本發(fā)明屬于服務(wù)器監(jiān)控管理技術(shù)領(lǐng)域,具體涉及一種嵌入式Linux系統(tǒng)下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法。
背景技術(shù):
目前嵌入式Linux系統(tǒng)已經(jīng)廣泛應(yīng)用在了服務(wù)器監(jiān)控領(lǐng)域,這些監(jiān)控軟件,時(shí)時(shí)刻刻對(duì)服務(wù)器的運(yùn)行狀態(tài)進(jìn)行監(jiān)控管理,需要保持長(zhǎng)時(shí)間的穩(wěn)定運(yùn)行,并能夠在自身崩潰的情況下,在較短的時(shí)間內(nèi)重新運(yùn)行。
目前,大部分監(jiān)控軟件,使用C語(yǔ)言進(jìn)行開(kāi)發(fā)。但C語(yǔ)言中,沒(méi)有提供類似C++中的trycatch類型的異常處理機(jī)制,一旦遇到某些如段錯(cuò)誤、浮點(diǎn)運(yùn)算錯(cuò)誤等問(wèn)題,程序就會(huì)崩潰退出。要保證程序繼續(xù)運(yùn)行,目前的解決方案是對(duì)監(jiān)控軟件進(jìn)行定期檢查,一旦檢測(cè)到監(jiān)控軟件異常終止,就再重新運(yùn)行該監(jiān)控軟件,這種方法一方面操作復(fù)雜,每次檢查都需要重新編輯組織語(yǔ)言;另一方面,只能通過(guò)檢查進(jìn)行預(yù)防,而不能時(shí)刻解決異常問(wèn)題。
因此,提供一種嵌入式Linux系統(tǒng)下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法是十分必要的。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于解決上述現(xiàn)有技術(shù)中存在的缺少try catch類型的異常處理機(jī)制,無(wú)法在監(jiān)控軟件中進(jìn)行錯(cuò)誤處理等難題,提供一種嵌入式linux系統(tǒng)下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法。
本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
一種嵌入式Linux系統(tǒng)下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法,其特征在于:包括以下步驟:(1)監(jiān)控軟件開(kāi)始運(yùn)行;
(2)代碼是否滿足監(jiān)控條件,如果滿足進(jìn)入步驟(3),若不滿足,退出監(jiān)控;
(3)進(jìn)行注冊(cè)信號(hào)處理;一旦監(jiān)控軟件發(fā)生錯(cuò)誤,錯(cuò)誤就由信號(hào)處理流程接管,而不是由操作系統(tǒng)處理,一般是直接退出;
(4)檢測(cè)信號(hào),檢測(cè)是否存在錯(cuò)誤信號(hào),如果不能檢測(cè)到錯(cuò)誤信號(hào),執(zhí)行正常監(jiān)控流程,進(jìn)入步驟(5),如果檢測(cè)到錯(cuò)誤信號(hào),則執(zhí)行錯(cuò)誤處理,跳轉(zhuǎn)至步驟(2);將檢測(cè)信號(hào)處理過(guò)程增加在監(jiān)控主體前,無(wú)信號(hào)時(shí)進(jìn)行正常的監(jiān)控主體流程,有信號(hào)時(shí)則進(jìn)行錯(cuò)誤處理。
(5)監(jiān)控主體是否產(chǎn)生錯(cuò)誤信號(hào),如果產(chǎn)生錯(cuò)誤信號(hào),進(jìn)行信號(hào)處理,并跳轉(zhuǎn)至步驟(4),如果沒(méi)有產(chǎn)生錯(cuò)誤信號(hào),則跳轉(zhuǎn)至步驟(2)重新開(kāi)始監(jiān)控流程。在信號(hào)處理過(guò)程中,增加跳轉(zhuǎn),使程序跳回監(jiān)控程序的循環(huán)流程。
作為優(yōu)選,所述步驟5中進(jìn)行信號(hào)處理時(shí),還進(jìn)行日志記錄操作。
作為優(yōu)選,所述步驟5中進(jìn)行信號(hào)處理時(shí),還進(jìn)行信號(hào)類型記錄操作。
作為優(yōu)選,所述步驟(4)中進(jìn)行錯(cuò)誤處理時(shí),還進(jìn)行錯(cuò)誤發(fā)生時(shí)間記錄操作。
作為優(yōu)選,所述步驟(4)中進(jìn)行錯(cuò)誤處理時(shí),還進(jìn)行全局變量記錄操作。
一種用于實(shí)現(xiàn)上述容錯(cuò)方法的系統(tǒng),該系統(tǒng)集中于嵌入式Linux系統(tǒng)的操作核心層,其特征在于:包括監(jiān)控管理模塊,以及與其相連接的進(jìn)程管理模塊、信號(hào)處理模塊、錯(cuò)誤處理模塊,所述進(jìn)程管理模塊、信號(hào)處理模塊、錯(cuò)誤處理模塊依次連接,其中:
(1)進(jìn)程管理模塊,該模塊用于實(shí)現(xiàn)監(jiān)控過(guò)程周期管理,包括監(jiān)控進(jìn)程的創(chuàng)建、調(diào)度、通信,使得原生進(jìn)程在有序執(zhí)行原有邏輯的同時(shí),滿足C語(yǔ)言容錯(cuò)監(jiān)控的需要;
(2)信號(hào)處理模塊,該模塊用于實(shí)現(xiàn)注冊(cè)信號(hào)檢測(cè)以及信號(hào)處理,注冊(cè)信號(hào)檢測(cè)到錯(cuò)誤后,首先程序自行進(jìn)行處理,無(wú)法解決時(shí)進(jìn)入Linux操作系統(tǒng)處理;信號(hào)處理模塊將終端的程序流程跳轉(zhuǎn),重新回到監(jiān)控流程中;
(3)錯(cuò)誤處理模塊,該模塊用于實(shí)現(xiàn)錯(cuò)誤類型診斷以及根據(jù)預(yù)配置采取相應(yīng)錯(cuò)誤處理方式,完成錯(cuò)誤修復(fù);
(4)監(jiān)控管理模塊,包括總控制端以及內(nèi)部管理端,總控制端提供給用戶可視的操作界面,內(nèi)部管理端與總控制端進(jìn)行交互,使得用戶可在總控制端查看監(jiān)控軟件運(yùn)行狀態(tài),容錯(cuò)日志,對(duì)系統(tǒng)各項(xiàng)參數(shù)進(jìn)行預(yù)配置。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明提供的一種嵌入式Linux環(huán)境下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法,通過(guò)在C語(yǔ)言中實(shí)現(xiàn)類似C++中的try catch異常處理結(jié)構(gòu),在監(jiān)控軟件中第一時(shí)間捕獲錯(cuò)誤,并對(duì)錯(cuò)誤進(jìn)行處理,避免程序發(fā)生崩潰,從而使得監(jiān)控軟件具有更強(qiáng)的容錯(cuò)性。能使得監(jiān)控軟件在遇到段錯(cuò)誤、浮點(diǎn)運(yùn)算錯(cuò)誤、退出錯(cuò)誤的情況下,保證監(jiān)控程序的循環(huán)過(guò)程一直執(zhí)行,并能夠在錯(cuò)誤處理過(guò)程里對(duì)錯(cuò)誤信息、錯(cuò)誤發(fā)生的位置進(jìn)行記錄,以便于錯(cuò)誤的分析。方案中還提供了用于實(shí)現(xiàn)該方法的系統(tǒng)設(shè)計(jì),該系統(tǒng)基于C語(yǔ)言監(jiān)控軟件的容錯(cuò)策略和方法,實(shí)現(xiàn)了對(duì)監(jiān)控過(guò)程中錯(cuò)誤程序的處理,性能損耗小,有效提高了系統(tǒng)的操作可靠性,避免了硬件定制的復(fù)雜性。
此外,本發(fā)明方法原理可靠,步驟簡(jiǎn)單,具有非常廣泛的應(yīng)用前景。
由此可見(jiàn),本發(fā)明與現(xiàn)有技術(shù)相比,具有突出的實(shí)質(zhì)性特點(diǎn)和顯著地進(jìn)步,其實(shí)施的有益效果也是顯而易見(jiàn)的。
附圖說(shuō)明
圖1是本發(fā)明提供的一種嵌入式Linux環(huán)境下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法的工作流程圖。
圖2是本發(fā)明提供的一種嵌入式Linux環(huán)境下C語(yǔ)言監(jiān)控軟件容錯(cuò)系統(tǒng)的結(jié)構(gòu)示意圖。
其中,1-進(jìn)程管理模塊,2-信號(hào)處理模塊,3-錯(cuò)誤處理模塊,4-監(jiān)控管理模塊,41-總控制端,42-內(nèi)部管理端。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述:
一種嵌入式Linux系統(tǒng)下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法,首先對(duì)通用的監(jiān)控軟件的處理流程做一個(gè)說(shuō)明。監(jiān)控軟件(main)是一個(gè)根據(jù)一定的定時(shí)規(guī)則,無(wú)限循環(huán)執(zhí)行的程序。要保證監(jiān)控軟件的持久性運(yùn)行,需要監(jiān)控核心代碼(monitor)足夠的穩(wěn)定,不出差錯(cuò)。但隨著代碼的復(fù)雜度增加,出錯(cuò)的幾率逐漸變大,特別是一些偶發(fā)性的、復(fù)現(xiàn)率低的錯(cuò)誤。這些錯(cuò)誤,如浮點(diǎn)運(yùn)算除以0,就會(huì)導(dǎo)致監(jiān)控程序出錯(cuò)退出。下面表格中的代碼,是本實(shí)施例的代碼框架。以其為例進(jìn)行本發(fā)明容錯(cuò)方法的描述。
如圖1所示,一種嵌入式Linux系統(tǒng)下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法,包括以下步驟:
(1)監(jiān)控軟件開(kāi)始運(yùn)行;
(2)代碼是否滿足監(jiān)控條件,如果滿足進(jìn)入步驟(3),若不滿足,退出監(jiān)控;
(3)進(jìn)行注冊(cè)信號(hào)處理;
(4)檢測(cè)信號(hào),檢測(cè)是否存在錯(cuò)誤信號(hào),如果不能檢測(cè)到錯(cuò)誤信號(hào),執(zhí)行正常監(jiān)控流程,進(jìn)入步驟(5),如果檢測(cè)到錯(cuò)誤信號(hào),則執(zhí)行錯(cuò)誤處理,跳轉(zhuǎn)至步驟(2);
(5)監(jiān)控主體是否產(chǎn)生錯(cuò)誤信號(hào),如果產(chǎn)生錯(cuò)誤信號(hào),進(jìn)行信號(hào)處理,并跳轉(zhuǎn)至步驟(4),如果沒(méi)有產(chǎn)生錯(cuò)誤信號(hào),則跳轉(zhuǎn)至步驟(2)重新開(kāi)始監(jiān)控流程。
其中,步驟(3)進(jìn)行注冊(cè)信號(hào)處理,對(duì)應(yīng)示例代碼的signal函數(shù)。如果為注冊(cè)信號(hào)處理,一旦出錯(cuò),程序就會(huì)退出,linux會(huì)彈出一個(gè)信息。注冊(cè)信號(hào)處理后,發(fā)生錯(cuò)誤后,首先由程序自己進(jìn)行這些錯(cuò)誤處理,自己處理不了時(shí),才會(huì)被Linux操作系統(tǒng)處理。為保證程序不退出,至少應(yīng)該對(duì)SIGSEGV、SIGFPE、SIGABRT注冊(cè)信號(hào)處理。signal_hdl就是注冊(cè)的信號(hào)處理函數(shù)。
步驟(4)中的檢測(cè)信號(hào)對(duì)應(yīng)示例代碼中的sigsetjmp函數(shù)。這是一個(gè)選擇結(jié)構(gòu),如果沒(méi)有檢測(cè)到信號(hào),則執(zhí)行正常監(jiān)控(monitor)流程;如果檢測(cè)到信號(hào),則執(zhí)行錯(cuò)誤處理。在錯(cuò)誤處理中,可以記錄錯(cuò)誤發(fā)生的時(shí)間,另外可以記錄一些全局變量,以大體定位錯(cuò)誤發(fā)生的位置。
步驟(5)中的信號(hào)處理操作對(duì)應(yīng)示例代碼中的signal_hdl函數(shù)。信號(hào)處理的主要目的是,將中斷的程序流程跳轉(zhuǎn)(siglongjmp),重新回到監(jiān)控流程,而不是接收到信號(hào)后,就使監(jiān)控程序退出。另外,可以在信號(hào)處理函數(shù)中,增加日志操作,對(duì)信號(hào)的類型等進(jìn)行記錄,作為bug分析日志的一部分。
如圖2所示,本發(fā)明還提供了一種用于實(shí)現(xiàn)上述容錯(cuò)方法的系統(tǒng),該系統(tǒng)集中于嵌入式Linux系統(tǒng)的操作核心層,包括監(jiān)控管理模塊4,以及與其相連接的進(jìn)程管理模塊1、信號(hào)處理模塊2、錯(cuò)誤處理模塊3,所述進(jìn)程管理模塊1、信號(hào)處理模塊2、錯(cuò)誤處理模塊3依次連接,其中:
(1)進(jìn)程管理模塊1,該模塊用于實(shí)現(xiàn)監(jiān)控過(guò)程周期管理,包括監(jiān)控進(jìn)程的創(chuàng)建、調(diào)度、通信,使得原生進(jìn)程在有序執(zhí)行原有邏輯的同時(shí),滿足C語(yǔ)言容錯(cuò)監(jiān)控的需要;
(2)信號(hào)處理模塊2,該模塊用于實(shí)現(xiàn)注冊(cè)信號(hào)檢測(cè)以及信號(hào)處理,注冊(cè)信號(hào)檢測(cè)到錯(cuò)誤后,首先程序自行進(jìn)行處理,無(wú)法解決時(shí)進(jìn)入Linux操作系統(tǒng)處理;信號(hào)處理模塊將終端的程序流程跳轉(zhuǎn),重新回到監(jiān)控流程中;
(3)錯(cuò)誤處理模塊3,該模塊用于實(shí)現(xiàn)錯(cuò)誤類型診斷以及根據(jù)預(yù)配置采取相應(yīng)錯(cuò)誤處理方式,完成錯(cuò)誤修復(fù);
(4)監(jiān)控管理模塊4,包括總控制端41以及內(nèi)部管理端42,總控制端41提供給用戶可視的操作界面,內(nèi)部管理端42與總控制端41進(jìn)行交互,使得用戶可在總控制端41查看監(jiān)控軟件運(yùn)行狀態(tài),容錯(cuò)日志,對(duì)系統(tǒng)各項(xiàng)參數(shù)進(jìn)行預(yù)配置。
本發(fā)明提供的一種嵌入式Linux環(huán)境下C語(yǔ)言監(jiān)控軟件容錯(cuò)的方法,通過(guò)在C語(yǔ)言中實(shí)現(xiàn)類似C++中的try catch結(jié)構(gòu),在監(jiān)控軟件中第一時(shí)間捕獲錯(cuò)誤,并對(duì)錯(cuò)誤進(jìn)行處理,避免程序發(fā)生崩潰,從而使得監(jiān)控軟件具有更強(qiáng)的容錯(cuò)性。能使得監(jiān)控軟件在遇到段錯(cuò)誤、浮點(diǎn)運(yùn)算錯(cuò)誤、退出錯(cuò)誤的情況下,保證監(jiān)控程序的循環(huán)過(guò)程一直執(zhí)行,并能夠在錯(cuò)誤處理過(guò)程里對(duì)錯(cuò)誤信息、錯(cuò)誤發(fā)生的位置進(jìn)行記錄,以便于錯(cuò)誤的分析。方案中還提供了用于實(shí)現(xiàn)該方法的系統(tǒng)設(shè)計(jì),該系統(tǒng)基于C語(yǔ)言監(jiān)控軟件的容錯(cuò)策略和方法,實(shí)現(xiàn)了對(duì)監(jiān)控過(guò)程中錯(cuò)誤程序的處理,性能損耗小,有效提高了系統(tǒng)的操作可靠性,避免了硬件定制的復(fù)雜性。
上述技術(shù)方案只是本發(fā)明的一種實(shí)施方式,對(duì)于本領(lǐng)域內(nèi)的技術(shù)人員而言,在本發(fā)明公開(kāi)了應(yīng)用方法和原理的基礎(chǔ)上,很容易做出各種類型的改進(jìn)或變形,而不僅限于本發(fā)明上述具體實(shí)施方式所描述的方法,因此前面描述的方式只是優(yōu)選的,而并不具有限制性的意義。