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