專利名稱:基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)操作系統(tǒng)領(lǐng)域,尤其涉及一種在Linux中,基于操作系統(tǒng)自帶的定時任務(wù)服務(wù),變相地實現(xiàn)一種更靈活更可靠更節(jié)省系統(tǒng)資源的守護(hù)進(jìn)程的方法。
背景技術(shù):
守護(hù)進(jìn)程也就是通暢所說的Daemon進(jìn)程,是Linux中的后臺服務(wù)進(jìn)程。它是一個生存期較長的進(jìn)程,通常獨立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程常常在系統(tǒng)引導(dǎo)裝入時啟動,在系統(tǒng)關(guān)閉時終止。使用守護(hù)進(jìn)程有以下優(yōu)點
1、生存周期長,可以一直處理或者等待處理某種任務(wù),有任務(wù)就處理,沒有任務(wù)就暫時休眠;
2、一個單獨的進(jìn)程就可以工作,不需要其它子進(jìn)程來工作。因為守護(hù)進(jìn)程有以上優(yōu)點,因而我們常用它來做如下工作
1、首先有一個任務(wù)隊列,里面存放著待處理的任務(wù),此隊列先進(jìn)先出,隊列長度可能為 0,也可能很長。2、守護(hù)進(jìn)程周期性的去查看任務(wù)隊列的狀態(tài),如隊列長度為0,則繼續(xù)休眠。若長度不為0,則從隊列頭取出任務(wù)進(jìn)行處理。依此循環(huán)執(zhí)行。但這種方式工作的傳統(tǒng)守護(hù)進(jìn)程有以下缺點
1、守護(hù)進(jìn)程一直運行于系統(tǒng)后臺,即使沒有任務(wù)也會存在,也會一直占用系統(tǒng)資源,盡管空閑時單個守護(hù)進(jìn)程占用的系統(tǒng)資源較少,但是當(dāng)一臺機(jī)器上有多個守護(hù)進(jìn)程時,這對系統(tǒng)資源是很大的浪費
2、不能及時釋放對其它服務(wù)的資源的占用。守護(hù)進(jìn)程一般都會和其它服務(wù)相關(guān)聯(lián),比如和數(shù)據(jù)庫服務(wù),守護(hù)進(jìn)程處理完任務(wù)后,需要將數(shù)據(jù)存入數(shù)據(jù)庫,因而守護(hù)進(jìn)程在啟動之初都會開啟一些數(shù)據(jù)庫連接(數(shù)據(jù)庫連接池),這樣守護(hù)進(jìn)程在整個運行的生命周期內(nèi)都會占用此數(shù)據(jù)庫連接資源,即使沒有任務(wù)也會如此,而像數(shù)據(jù)庫連接池等資源都是有限的, 守護(hù)進(jìn)程不能在空閑時釋放這些資源,造成了其它服務(wù)無法獲取這些資源。3、守護(hù)進(jìn)程的生命周期無法保證。守護(hù)進(jìn)程在處理任務(wù)時可能會因各種情況而僵死,甚至進(jìn)程終結(jié)。在守護(hù)進(jìn)程死掉后,那么任務(wù)隊列的任務(wù)也將無法得到及時處理。
發(fā)明內(nèi)容
針對以上不足,本發(fā)明要解決的技術(shù)問題是提供一種基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法,利用Linux的定時任務(wù),變向的來實現(xiàn)一種新形態(tài)的守護(hù)進(jìn)程。本發(fā)明所述的守護(hù)進(jìn)程非傳統(tǒng)的長時間運行于系統(tǒng)后臺的進(jìn)程,而是利用Linux定時任務(wù),周期性的啟用新進(jìn)程,來處理任務(wù)隊列的任務(wù)。為了解決上述技術(shù)問題,本發(fā)明提供一種基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法,包括在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息; Linux定時任務(wù)根據(jù)配置文件的信息啟動所述守護(hù)進(jìn)程;
讀取配置文件信息,判斷已開啟的守護(hù)進(jìn)程數(shù)是否達(dá)到了配置文件所設(shè)的最大啟動數(shù),如果沒有達(dá)到最大啟動數(shù),則將所述守護(hù)進(jìn)程的PID (Process Identifier)存入緩存庫中,否則終止所述守護(hù)進(jìn)程;
所述守護(hù)進(jìn)程查看任務(wù)隊列狀態(tài),如果任務(wù)隊列長度大于0,所述守護(hù)進(jìn)程循環(huán)不斷從任務(wù)隊列中讀取任務(wù)數(shù)據(jù)進(jìn)行處理,如果任務(wù)隊列長度不大于0,則從緩存庫中刪除所述守護(hù)進(jìn)程的PID,終止所述守護(hù)進(jìn)程。進(jìn)一步的,在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息包括守護(hù)進(jìn)程啟動的周期和守護(hù)進(jìn)程啟動命令。進(jìn)一步的,Linux定時任務(wù)根據(jù)配置文件中設(shè)置的時間間隔啟動所述守護(hù)進(jìn)程。 進(jìn)一步的,讀取配置文件信息包括守護(hù)進(jìn)程的最大啟動數(shù)、守護(hù)進(jìn)程日志保存地址、數(shù)據(jù)庫配置信息。進(jìn)一步的,守護(hù)進(jìn)程根據(jù)數(shù)據(jù)庫配置信息連接數(shù)據(jù)庫,并將處理任務(wù)隊列中的任務(wù)之后的結(jié)果存入數(shù)據(jù)庫。本發(fā)明還提供了一種基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)系統(tǒng),包括 配置單元,用于在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息;
啟動單元,用于Linux定時任務(wù)根據(jù)配置文件的信息啟動所述守護(hù)進(jìn)程; 判斷單元,用于讀取配置文件信息,判斷已開啟的守護(hù)進(jìn)程數(shù)是否達(dá)到了配置文件所設(shè)的最大啟動數(shù),如果沒有達(dá)到最大啟動數(shù),則將所述守護(hù)進(jìn)程的PID (Process Identifier)存入緩存庫中,否則終止所述守護(hù)進(jìn)程;
執(zhí)行單元,用于所述守護(hù)進(jìn)程查看任務(wù)隊列狀態(tài),如果任務(wù)隊列長度大于0,所述守護(hù)進(jìn)程循環(huán)不斷從任務(wù)隊列中讀取任務(wù)數(shù)據(jù)進(jìn)行處理,如果任務(wù)隊列長度不大于0,則從緩存庫中刪除所述守護(hù)進(jìn)程的PID,終止所述守護(hù)進(jìn)程。本發(fā)明的有益效果是
本發(fā)明中守護(hù)進(jìn)程并不常駐系統(tǒng)中,不會一直占用系統(tǒng)資源,當(dāng)有待處理的任務(wù)時,此守護(hù)進(jìn)程才會啟動。當(dāng)沒有待處理任務(wù)時,守護(hù)進(jìn)程會立即釋放系統(tǒng)資源,包括CPU、內(nèi)存、 存儲空間、網(wǎng)絡(luò)流量、電量等,同時也會立即釋放其它服務(wù)資源。本發(fā)明中守護(hù)進(jìn)程是由定時任務(wù)所啟動的,且會根據(jù)任務(wù)量合理的啟動足夠的進(jìn)程數(shù)來處理待處理任務(wù)。當(dāng)沒有待處理任務(wù)時,系統(tǒng)中沒有定時任務(wù)存在,當(dāng)有大量待處理任務(wù)時,會依次啟動大量的守護(hù)進(jìn)程來處理任務(wù)。所以這種方法和單一的常駐系統(tǒng)的守護(hù)進(jìn)程相比有著高度的靈活性和高效性。因此這種守護(hù)進(jìn)程也具有更強大的計算能力,可以配合復(fù)雜深入的細(xì)粒度任務(wù)模型。本發(fā)明中守護(hù)進(jìn)程的數(shù)量依賴于待處理的任務(wù)數(shù),因而單一的某個守護(hù)進(jìn)程的僵死或終結(jié),不會影響整個任務(wù)隊列的處理情況,不會因為系統(tǒng)或程序錯誤造成大量任務(wù)積壓保證了任務(wù)處理的實時性。本發(fā)明依賴于Linux系統(tǒng)的定時任務(wù)。Linux系統(tǒng)的定時任務(wù)穩(wěn)定、高效且配置操作簡單,用它來調(diào)度守護(hù)進(jìn)程十分方便,不需額外開啟其它進(jìn)程來做總的調(diào)度工作。既保證了守護(hù)進(jìn)程的穩(wěn)定性又減少了復(fù)雜性。
為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā) 明基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法流程圖2為本發(fā)明基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法具體實施例流程圖; 圖3為基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)系統(tǒng)示意圖。
具體實施例方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實施例中的技術(shù)方案,并使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明中技術(shù)方案作進(jìn)一步詳細(xì)的說明。本發(fā)明所述的守護(hù)進(jìn)程非傳統(tǒng)的長時間運行于系統(tǒng)后臺的進(jìn)程,而是利用Linux 定時任務(wù),周期性的啟用新進(jìn)程,來處理任務(wù)隊列的任務(wù)。流程如圖1所示
S101、在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息; 在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息包括守護(hù)進(jìn)程啟動的周期和守護(hù)進(jìn)程啟動命令。S102、Linux定時任務(wù)根據(jù)配置文件的信息啟動所述守護(hù)進(jìn)程; Linux定時任務(wù)根據(jù)配置文件中設(shè)置的時間間隔啟動所述守護(hù)進(jìn)程。讀取配置文件信息包括守護(hù)進(jìn)程的最大啟動數(shù)、守護(hù)進(jìn)程日志保存地址、數(shù)據(jù)庫
配直^[曰息οS103、讀取配置文件信息,判斷已開啟的守護(hù)進(jìn)程數(shù)是否達(dá)到了配置文件所設(shè)的最大啟動數(shù),如果沒有達(dá)到最大啟動數(shù),則將所述守護(hù)進(jìn)程的PID存入緩存庫中,否則終止所述守護(hù)進(jìn)程;
S104、所述守護(hù)進(jìn)程查看任務(wù)隊列狀態(tài),如果任務(wù)隊列長度大于0,所述守護(hù)進(jìn)程循環(huán)不斷從任務(wù)隊列中讀取任務(wù)數(shù)據(jù)進(jìn)行處理,如果任務(wù)隊列長度不大于0,則從緩存庫中刪除所述守護(hù)進(jìn)程的PID,終止所述守護(hù)進(jìn)程。守護(hù)進(jìn)程根據(jù)數(shù)據(jù)庫配置信息連接數(shù)據(jù)庫,并將處理任務(wù)隊列中的任務(wù)之后的結(jié)果存入數(shù)據(jù)庫。下面給出本發(fā)明的一個具體實現(xiàn)方法,如圖2所示
S201、在Linux的定時任務(wù)中配置守護(hù)進(jìn)程啟動的周期和守護(hù)進(jìn)程啟動命令。Linux定時任務(wù)配置格式如下
氺氺氺氺氺氺command
分時日月周用戶命令(程序路徑)
Linux的定時任務(wù)可以精確到分鐘,根據(jù)任務(wù)隊列數(shù)量或?qū)嶋H需要,靈活設(shè)置守護(hù)進(jìn)程啟動周期。并配置上守護(hù)進(jìn)程的啟動命令。S202、Linux定時任務(wù)啟動守護(hù)進(jìn)程。
Linux定時任務(wù)會根據(jù)S201的設(shè)置,在設(shè)置時間間隔執(zhí)行守護(hù)進(jìn)程啟動命令。
S203、守護(hù)進(jìn)程讀取配置文件信息。配置文件信息主要包含守護(hù)進(jìn)程的最大啟動數(shù)、守護(hù)進(jìn)程日志保存地址、數(shù)據(jù)庫信息及其它配置信息。數(shù)據(jù)庫信息包括數(shù)據(jù)庫名稱,數(shù)據(jù)庫IP地址,端口號,用戶名,密碼等。S204、判斷已開啟的守護(hù)進(jìn)程數(shù)是否達(dá)到了最大值。因每個守護(hù)進(jìn)程都會消耗一定系統(tǒng)資源,且定時任務(wù)每分鐘都會開啟一個守護(hù)進(jìn)程,若任務(wù)隊列里待處理任務(wù)較多時,守護(hù)進(jìn)程都處于繁忙狀態(tài),這樣隨著定時任務(wù)的執(zhí)行,守護(hù)進(jìn)程會越開越多。會耗盡系統(tǒng)資源,所以必須設(shè)置一個可開啟守護(hù)進(jìn)程數(shù)量的最大值。當(dāng)系統(tǒng)中已開啟的守護(hù)進(jìn)程數(shù)達(dá)到此值后,不再開啟新的守護(hù)進(jìn)程。判斷方法是守護(hù)進(jìn)程先查看守護(hù)進(jìn)程緩存庫的長度,若長度小于所設(shè)最大值,則沒有達(dá)到最大值,轉(zhuǎn)到步驟S205。若長度大于或者等于所設(shè)最大值,則轉(zhuǎn)至S209。S205、將自身PID存入緩存庫。S206、守護(hù)進(jìn)程處理任務(wù)隊列。首先,守護(hù)進(jìn)程查看任務(wù)隊列狀態(tài),若任務(wù)隊列長度大于0,則從隊列頭讀取數(shù)據(jù)進(jìn)行處理。若隊列長度為0,表明無任務(wù)待處理。S207、守護(hù)進(jìn)程處理完任務(wù)后,繼續(xù)查看隊列狀態(tài),循環(huán)處理任務(wù)
守護(hù)進(jìn)程處理完認(rèn)領(lǐng)的任務(wù)后,再次查看任務(wù)隊列狀態(tài),若任務(wù)隊伍隊列長度大于0, 則再次認(rèn)領(lǐng)任務(wù)。轉(zhuǎn)至S206。S208、守護(hù)進(jìn)程刪除緩存庫中自身進(jìn)程的PID。為了回收系統(tǒng)資源,保證系統(tǒng)高效運轉(zhuǎn),當(dāng)已啟動的守護(hù)進(jìn)程數(shù)量達(dá)到所設(shè)最大值時或任務(wù)隊列中沒有待處理的任務(wù)時,守護(hù)進(jìn)程將守護(hù)進(jìn)程緩存庫中將自身PID刪除。S209、守護(hù)進(jìn)程終止。守護(hù)進(jìn)程立即終止自身進(jìn)程,釋放資源。等待著下一次被定時任務(wù)啟動。本發(fā)明還提供了一種基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)系統(tǒng),如圖3所示,包括
配置單元301,用于在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息; 啟動單元302,用于Linux定時任務(wù)根據(jù)配置文件的信息啟動所述守護(hù)進(jìn)程; 判斷單元303,用于讀取配置文件信息,判斷已開啟的守護(hù)進(jìn)程數(shù)是否達(dá)到了配置文件所設(shè)的最大啟動數(shù),如果沒有達(dá)到最大啟動數(shù),則將所述守護(hù)進(jìn)程的PID存入緩存庫中,否則終止所述守護(hù)進(jìn)程;
執(zhí)行單元304,用于所述守護(hù)進(jìn)程查看任務(wù)隊列狀態(tài),如果任務(wù)隊列長度大于0,所述守護(hù)進(jìn)程循環(huán)不斷從任務(wù)隊列中讀取任務(wù)數(shù)據(jù)進(jìn)行處理,如果任務(wù)隊列長度不大于0,則從緩存庫中刪除所述守護(hù)進(jìn)程的PID,終止所述守護(hù)進(jìn)程。雖然通過實施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。
權(quán)利要求
1.一種基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法,其特征在于,包括以下步驟在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息;Linux定時任務(wù)根據(jù)配置文件的信息啟動所述守護(hù)進(jìn)程;讀取配置文件信息,判斷已開啟的守護(hù)進(jìn)程數(shù)是否達(dá)到了配置文件所設(shè)的最大啟動數(shù),如果沒有達(dá)到最大啟動數(shù),則將所述守護(hù)進(jìn)程的PID (Process Identifier)存入緩存庫中,否則終止所述守護(hù)進(jìn)程;所述守護(hù)進(jìn)程查看任務(wù)隊列狀態(tài),如果任務(wù)隊列長度大于0,所述守護(hù)進(jìn)程循環(huán)不斷從任務(wù)隊列中讀取任務(wù)數(shù)據(jù)進(jìn)行處理,如果任務(wù)隊列長度不大于0,則從緩存庫中刪除所述守護(hù)進(jìn)程的PID,終止所述守護(hù)進(jìn)程。
2.如權(quán)利要求1所述的基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法,其特征在于,在 Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息包括守護(hù)進(jìn)程啟動的周期和守護(hù)進(jìn)程啟動命令。
3.如權(quán)利要求1所述的基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法,其特征在于,Linux 定時任務(wù)根據(jù)配置文件中設(shè)置的時間間隔啟動所述守護(hù)進(jìn)程。
4.如權(quán)利要求1所述的基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法,其特征在于,讀取配置文件信息包括守護(hù)進(jìn)程的最大啟動數(shù)、守護(hù)進(jìn)程日志保存地址、數(shù)據(jù)庫配置信息。
5.如權(quán)利要求4所述的基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法,其特征在于,守護(hù)進(jìn)程根據(jù)數(shù)據(jù)庫配置信息連接數(shù)據(jù)庫,并將處理任務(wù)隊列中的任務(wù)之后的結(jié)果存入數(shù)據(jù)庫。
6.一種基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)系統(tǒng),其特征在于,包括配置單元,用于在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息;啟動單元,用于Linux定時任務(wù)根據(jù)配置文件的信息啟動所述守護(hù)進(jìn)程;判斷單元,用于讀取配置文件信息,判斷已開啟的守護(hù)進(jìn)程數(shù)是否達(dá)到了配置文件所設(shè)的最大啟動數(shù),如果沒有達(dá)到最大啟動數(shù),則將所述守護(hù)進(jìn)程的PID (Process Identifier)存入緩存庫中,否則終止所述守護(hù)進(jìn)程;執(zhí)行單元,用于所述守護(hù)進(jìn)程查看任務(wù)隊列狀態(tài),如果任務(wù)隊列長度大于0,所述守護(hù)進(jìn)程循環(huán)不斷從任務(wù)隊列中讀取任務(wù)數(shù)據(jù)進(jìn)行處理,如果任務(wù)隊列長度不大于0,則從緩存庫中刪除所述守護(hù)進(jìn)程的PID,終止所述守護(hù)進(jìn)程。
全文摘要
本發(fā)明公開了一種基于Linux定時任務(wù)的守護(hù)進(jìn)程實現(xiàn)方法,包括在Linux定時任務(wù)的配置文件中配置守護(hù)進(jìn)程的信息;Linux定時任務(wù)根據(jù)配置文件的信息啟動所述守護(hù)進(jìn)程;讀取配置文件信息,判斷已開啟的守護(hù)進(jìn)程數(shù)是否達(dá)到了配置文件所設(shè)的最大啟動數(shù);查看任務(wù)隊列狀態(tài),如果任務(wù)隊列長度大于0,守護(hù)進(jìn)程循環(huán)不斷從任務(wù)隊列中讀取任務(wù)數(shù)據(jù)進(jìn)行處理。本發(fā)明守護(hù)進(jìn)程并不常駐系統(tǒng)中,不會一直占用系統(tǒng)資源,由定時任務(wù)所啟動的,且會根據(jù)任務(wù)量合理的啟動足夠的進(jìn)程數(shù)來處理待處理任務(wù)。
文檔編號G06F9/46GK102331950SQ20111027241
公開日2012年1月25日 申請日期2011年9月15日 優(yōu)先權(quán)日2011年9月15日
發(fā)明者孫晉超, 楊祖明, 王亮 申請人:北京安天電子設(shè)備有限公司