專利名稱:進(jìn)程狀態(tài)監(jiān)控方法及單元的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,具體涉及進(jìn)程監(jiān)控方法及單元。
背景技術(shù):
進(jìn)程是計(jì)算機(jī)應(yīng)用軟件運(yùn)行的一個(gè)實(shí)例,對(duì)進(jìn)程狀態(tài)的監(jiān)控和管理是計(jì)算機(jī)軟件管理的一個(gè)重要范疇。一個(gè)好的應(yīng)用程序,尤其是對(duì)外提供服務(wù)的應(yīng)用程序,必須能夠?qū)⑵鋬?nèi)部運(yùn)行狀態(tài)實(shí)時(shí)反饋給外部系統(tǒng),供外界對(duì)其進(jìn)行監(jiān)控、管理和維護(hù)。一旦進(jìn)程運(yùn)行出現(xiàn)問(wèn)題,外界能夠及時(shí)獲知,并進(jìn)而采取相應(yīng)的對(duì)策如重新啟動(dòng)進(jìn)程等。對(duì)進(jìn)程狀態(tài)監(jiān)控的準(zhǔn)確性,直接影響到應(yīng)用軟件的可用性?,F(xiàn)有對(duì)進(jìn)程進(jìn)行監(jiān)控的方法主要有兩種第一種通過(guò)操作系統(tǒng)提供的應(yīng)用程序接口(API,ApplicationProgramming hterface)對(duì)操作系統(tǒng)中運(yùn)行的進(jìn)程進(jìn)行監(jiān)控。各種不同的操作系統(tǒng)都提供了系統(tǒng)監(jiān)控的 API,能夠監(jiān)控到系統(tǒng)中正在運(yùn)行的各個(gè)進(jìn)程狀態(tài),此方式能實(shí)時(shí)得到進(jìn)程的中央處理單元 (CPU, Central Processing Unit)利用率、內(nèi)存占用率等通用信息。第二種進(jìn)程通過(guò)打開(kāi)特定的套接字(Socket)端口,與外部程序通信并進(jìn)行數(shù)據(jù)交互,將進(jìn)程的內(nèi)部狀態(tài)信息反饋給外部程序。第一種方案存在以下缺點(diǎn)—、監(jiān)控?cái)?shù)據(jù)不完整通過(guò)操作系統(tǒng)提供的API只能獲知進(jìn)程是否正在運(yùn)行,并得到CPU、內(nèi)存等通用信息,無(wú)法獲知進(jìn)程更具體的內(nèi)部狀態(tài)信息,例如一個(gè)服務(wù)進(jìn)程在開(kāi)始啟動(dòng)到能夠正常提供服務(wù)有一個(gè)時(shí)間間隔,此時(shí)進(jìn)程的狀態(tài)應(yīng)該是“正在啟動(dòng)”,而不是通過(guò)操作系統(tǒng)的API獲知的“已經(jīng)啟動(dòng)并能提供服務(wù)”。二、跨平臺(tái)能力較低對(duì)不同的操作系統(tǒng)需要使用不同的API進(jìn)行監(jiān)控,使得監(jiān)控軟件的跨平臺(tái)能力降低。三、無(wú)法對(duì)多實(shí)例進(jìn)程的各個(gè)實(shí)例進(jìn)行區(qū)分同一個(gè)操作系統(tǒng)中如果同時(shí)啟動(dòng)同一個(gè)應(yīng)用程序的多個(gè)實(shí)例,操作系統(tǒng)無(wú)法區(qū)分具體需要監(jiān)控哪個(gè)實(shí)例。對(duì)基于Java虛擬機(jī)的服務(wù)進(jìn)程進(jìn)行監(jiān)控時(shí)該問(wèn)題尤其突出,系統(tǒng)中所有使用Java虛擬機(jī)的程序使用操作系統(tǒng)提供的API取到的進(jìn)程名都是“java”,無(wú)法區(qū)分哪個(gè)進(jìn)程是需要監(jiān)控的進(jìn)程。第二種方案存在以下缺點(diǎn)一、可能出現(xiàn)監(jiān)控沖突=Socket端口是操作系統(tǒng)中的一類重要資源,不同的進(jìn)程不能綁定相同的端口以提供服務(wù),因此應(yīng)用程序啟動(dòng)時(shí),如果監(jiān)控端口已經(jīng)被其它進(jìn)程占用了,就會(huì)產(chǎn)生監(jiān)控失敗的問(wèn)題。二、Socket資源對(duì)操作系統(tǒng)依賴過(guò)高當(dāng)操作系統(tǒng)發(fā)生問(wèn)題時(shí),Socket端口可能會(huì)誤認(rèn)為被監(jiān)控進(jìn)程已經(jīng)停止,從而不繼續(xù)提供監(jiān)控服務(wù),此時(shí)監(jiān)控操作將會(huì)失敗。在進(jìn)程的監(jiān)控過(guò)程中,一旦由于外部原因?qū)е芦@取的監(jiān)控?cái)?shù)據(jù)出現(xiàn)問(wèn)題,就可能導(dǎo)致外部監(jiān)控程序?qū)Ρ槐O(jiān)控進(jìn)程執(zhí)行誤操作如將正常運(yùn)行的進(jìn)程重啟等,此類誤操作導(dǎo)致的后果往往很嚴(yán)重。因此,亟需一種穩(wěn)定、簡(jiǎn)單、通用的進(jìn)程狀態(tài)監(jiān)控方法。
發(fā)明內(nèi)容
本發(fā)明提供進(jìn)程狀態(tài)監(jiān)控方法及單元,以提高監(jiān)控進(jìn)程狀態(tài)的準(zhǔn)確性、穩(wěn)定性和通用性。本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種進(jìn)程狀態(tài)監(jiān)控方法,預(yù)先設(shè)定每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)一個(gè)狀態(tài)文件,且所有狀態(tài)文件互不重疊,該方法包括一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例啟動(dòng),該實(shí)例在自身的狀態(tài)文件上加互斥鎖,并將自身從啟動(dòng)到停止過(guò)程中的各個(gè)狀態(tài)信息寫入該狀態(tài)文件中;監(jiān)控進(jìn)程從所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件中讀取狀態(tài)信息。所述狀態(tài)信息為正在啟動(dòng)、已經(jīng)啟動(dòng)、正在停止或已經(jīng)停止。所述監(jiān)控進(jìn)程從所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件中讀取狀態(tài)信息之前進(jìn)一步包括監(jiān)控進(jìn)程定時(shí)查詢所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件,判斷是否該狀態(tài)文件不存在或者未加鎖,若是,則確定所述實(shí)例未啟動(dòng)或已停止;否則,執(zhí)行所述從所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件中讀取狀態(tài)信息的動(dòng)作。當(dāng)監(jiān)控進(jìn)程發(fā)現(xiàn)所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件加鎖時(shí),所述方法進(jìn)一步包括監(jiān)控進(jìn)程發(fā)現(xiàn)所述狀態(tài)文件中的狀態(tài)信息在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)未被更新,則執(zhí)行實(shí)例異常操作。所述該實(shí)例在自身的狀態(tài)文件上加互斥鎖之后進(jìn)一步包括該實(shí)例定時(shí)將自身的資源占用信息寫入自身的狀態(tài)文件中;且,監(jiān)控進(jìn)程定時(shí)從所述實(shí)例的狀態(tài)文件中讀取資源占用信息;或者,該實(shí)例在自身發(fā)生運(yùn)行錯(cuò)誤現(xiàn)象時(shí),將錯(cuò)誤信息寫入自身的狀態(tài)文件中;且,監(jiān)控進(jìn)程定時(shí)從所述實(shí)例的狀態(tài)文件中讀取錯(cuò)誤信息。所述方法進(jìn)一步包括監(jiān)控進(jìn)程在需要對(duì)一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例進(jìn)行管理時(shí),將管理指令寫入該實(shí)例的狀態(tài)文件中,該實(shí)例讀取該指令,根據(jù)該指令執(zhí)行相應(yīng)操作。所述預(yù)先設(shè)定每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)一個(gè)狀態(tài)文件包括監(jiān)控進(jìn)程或預(yù)先設(shè)定的狀態(tài)文件分配進(jìn)程為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配一個(gè)狀態(tài)文件;或者,預(yù)先設(shè)定狀態(tài)文件分配規(guī)則,以便每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例根據(jù)該規(guī)則確定本實(shí)例對(duì)應(yīng)的狀態(tài)文件。一種進(jìn)程狀態(tài)監(jiān)控單元,包括狀態(tài)文件信息獲取模塊獲取并記錄每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)的狀態(tài)文件信息,其中,所有狀態(tài)文件互不重疊;監(jiān)控模塊根據(jù)狀態(tài)文件信息獲取模塊記錄的每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例的狀態(tài)文件信息,定時(shí)輪詢各被監(jiān)控進(jìn)程的各實(shí)例的狀態(tài)文件,若發(fā)現(xiàn)一個(gè)實(shí)例的狀態(tài)文件被加互斥鎖,則從該狀態(tài)文件中讀取該實(shí)例寫入的狀態(tài)信息。
該單元進(jìn)一步包括狀態(tài)文件分配模塊為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配一個(gè)狀態(tài)文件,且所有狀態(tài)文件互不重疊,并將為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配的狀態(tài)文件信息發(fā)送給狀態(tài)文件信息獲取模塊。所述監(jiān)控模塊進(jìn)一步包括用于當(dāng)發(fā)現(xiàn)一個(gè)被加互斥鎖的狀態(tài)文件中的狀態(tài)信息在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)未被更新時(shí),執(zhí)行實(shí)例異常操作的子模塊。所述監(jiān)控模塊進(jìn)一步包括用于當(dāng)發(fā)現(xiàn)一個(gè)狀態(tài)文件被加互斥鎖后,定時(shí)從該狀態(tài)文件中讀取實(shí)例寫入的資源占用信息或錯(cuò)誤信息的子模塊。該單元進(jìn)一步包括管理模塊當(dāng)需要對(duì)一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例進(jìn)行管理時(shí),將管理指令寫入該實(shí)例的狀態(tài)文件中。與現(xiàn)有技術(shù)相比,本發(fā)明中,每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)一個(gè)狀態(tài)文件,且所有狀態(tài)文件互不重疊,當(dāng)一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例啟動(dòng)時(shí),對(duì)其狀態(tài)文件加互斥鎖,并將從啟動(dòng)到停止過(guò)程中的各狀態(tài)信息寫入狀態(tài)文件中,監(jiān)控進(jìn)程從該狀態(tài)文件中讀取該狀態(tài)信息,使得被監(jiān)控進(jìn)程在自身狀態(tài)發(fā)生改變時(shí),可以實(shí)時(shí)將改變后的狀態(tài)信息寫入狀態(tài)文件中,從而使得監(jiān)控進(jìn)程能夠準(zhǔn)確得知每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例的各個(gè)狀態(tài),同時(shí),本發(fā)明只使用文件即可,不依賴于API或Socket端口,對(duì)各種操作系統(tǒng)都適用,且很穩(wěn)定。
圖1為本發(fā)明實(shí)施例提供的進(jìn)程狀態(tài)監(jiān)控方法流程圖;圖2為本發(fā)明實(shí)施例提供的進(jìn)程狀態(tài)監(jiān)控單元的組成圖。
具體實(shí)施例方式下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明再作進(jìn)一步詳細(xì)的說(shuō)明。圖1為本發(fā)明實(shí)施例提供的進(jìn)程狀態(tài)監(jiān)控方法流程圖,如圖1所示,其具體步驟如下步驟100 為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配一個(gè)狀態(tài)文件,且所有狀態(tài)文件互不重疊,監(jiān)控進(jìn)程記錄各被監(jiān)控進(jìn)程ID+實(shí)例ID與狀態(tài)文件ID的對(duì)應(yīng)關(guān)系,被監(jiān)控進(jìn)程記錄自身的各實(shí)例ID與狀態(tài)文件ID的對(duì)應(yīng)關(guān)系。這里,狀態(tài)文件ID可以為文件的存儲(chǔ)路徑+文件名??捎杀O(jiān)控進(jìn)程或一個(gè)專門的狀態(tài)文件分配進(jìn)程來(lái)為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配狀態(tài)文件,將為所有被監(jiān)控進(jìn)程的所有實(shí)例分配的狀態(tài)文件信息如被監(jiān)控進(jìn)程ID+ 實(shí)例ID+狀態(tài)文件ID存入監(jiān)控進(jìn)程和被監(jiān)控進(jìn)程都可訪問(wèn)的存儲(chǔ)區(qū)域中。一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例一開(kāi)始啟動(dòng),首先從該存儲(chǔ)區(qū)域讀取自身的狀態(tài)文件信息如根據(jù)被監(jiān)控進(jìn)程ID+實(shí)例ID讀取到狀態(tài)文件ID ;而監(jiān)控進(jìn)程則可從該存儲(chǔ)區(qū)域中讀取到所有被監(jiān)控進(jìn)程的所有實(shí)例的狀態(tài)文件信息?;蛘撸部深A(yù)先確定一個(gè)狀態(tài)文件分配規(guī)則,例如所有被監(jiān)控進(jìn)程的狀態(tài)文件的存儲(chǔ)路徑相同,都為一個(gè)指定的存儲(chǔ)路徑,而每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例的狀態(tài)文件的文件名即為被監(jiān)控進(jìn)程ID+實(shí)例ID,監(jiān)控進(jìn)程和被監(jiān)控進(jìn)程都預(yù)先記錄該規(guī)則。當(dāng)步驟101中任一被監(jiān)控進(jìn)程的一個(gè)實(shí)例開(kāi)始啟動(dòng)時(shí),首先根據(jù)該狀態(tài)文件分配規(guī)則得出自身的狀態(tài)文件信息如狀態(tài)文件存儲(chǔ)路徑+文件名,再執(zhí)行后續(xù)操作;而監(jiān)控進(jìn)程則可根據(jù)該規(guī)則, 得到所有被監(jiān)控進(jìn)程的所有實(shí)例的狀態(tài)文件信息。若被監(jiān)控進(jìn)程只有一個(gè)實(shí)例,則只為該被監(jiān)控進(jìn)程分配一個(gè)狀態(tài)文件即可,此時(shí), 監(jiān)控進(jìn)程只需記錄該被監(jiān)控進(jìn)程ID與其狀態(tài)文件ID的對(duì)應(yīng)關(guān)系,被監(jiān)控進(jìn)程只需記錄其狀態(tài)文件ID。步驟101 被監(jiān)控進(jìn)程的一個(gè)實(shí)例啟動(dòng),對(duì)自身狀態(tài)文件的部分區(qū)域如頭2個(gè)字節(jié)加上互斥鎖。這里,被監(jiān)控進(jìn)程的一個(gè)實(shí)例啟動(dòng)后,若根據(jù)記錄的自身的狀態(tài)文件ID,發(fā)現(xiàn)監(jiān)控進(jìn)程為自身分配的狀態(tài)文件還未存在,則根據(jù)該狀態(tài)文件ID如文件的存儲(chǔ)路徑+文件名, 創(chuàng)建狀態(tài)文件。同一操作系統(tǒng)下,同一時(shí)刻只允許一個(gè)進(jìn)程的一個(gè)實(shí)例對(duì)特定文件的特定區(qū)域加鎖。步驟102 被監(jiān)控進(jìn)程的該實(shí)例將自身從啟動(dòng)到停止過(guò)程中的各個(gè)狀態(tài)信息寫入狀態(tài)文件中。被監(jiān)控進(jìn)程的實(shí)例從啟動(dòng)到停止過(guò)程中的各個(gè)狀態(tài)包括正在啟動(dòng)、已經(jīng)啟動(dòng)、正
在停止、已經(jīng)停止等。這里,可預(yù)先設(shè)定狀態(tài)文件中加鎖區(qū)域之后的某塊區(qū)域?yàn)闋顟B(tài)信息區(qū)域,被監(jiān)控進(jìn)程的實(shí)例將自身狀態(tài)信息寫入該區(qū)域。還可在狀態(tài)文件中設(shè)置CPU、內(nèi)存等資源的占用信息區(qū)域,被監(jiān)控進(jìn)程的實(shí)例可定時(shí)如每隔10秒將自身的CPU、內(nèi)存等資源的占用信息以及當(dāng)前的時(shí)間戳寫入狀態(tài)文件的對(duì)應(yīng)區(qū)域中。還可在狀態(tài)文件中設(shè)置錯(cuò)誤信息區(qū)域,如果被監(jiān)控進(jìn)程的當(dāng)前實(shí)例在運(yùn)行過(guò)程中出錯(cuò)如數(shù)據(jù)庫(kù)等外部資源突然不可用,則被監(jiān)控進(jìn)程的當(dāng)前實(shí)例可將錯(cuò)誤信息寫入該區(qū)域。步驟103 監(jiān)控進(jìn)程定時(shí)輪詢各被監(jiān)控進(jìn)程的各實(shí)例的狀態(tài)文件,對(duì)于每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例執(zhí)行步驟104 106 步驟104 監(jiān)控進(jìn)程判斷是否該被監(jiān)控進(jìn)程的該實(shí)例的狀態(tài)文件不存在或者狀態(tài)文件未加互斥鎖,若是,執(zhí)行步驟105 ;否則,執(zhí)行步驟106。步驟105 監(jiān)控進(jìn)程認(rèn)為該被監(jiān)控進(jìn)程的該實(shí)例未啟動(dòng)或已停止,本流程結(jié)束。步驟106 監(jiān)控進(jìn)程從該被監(jiān)控進(jìn)程的該實(shí)例的狀態(tài)文件讀取狀態(tài)信息。監(jiān)控進(jìn)程可根據(jù)讀取的狀態(tài)信息采取相應(yīng)的操作。例如如果發(fā)現(xiàn)正在運(yùn)行的一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例突然異常停止,則應(yīng)該立即記錄日志,并重新啟動(dòng)該被監(jiān)控進(jìn)程的該實(shí)例。監(jiān)控進(jìn)程還可從該實(shí)例的狀態(tài)文件中讀取資源占用信息、錯(cuò)誤信息等。步驟107 被監(jiān)控進(jìn)程的一個(gè)實(shí)例退出,其狀態(tài)文件的互斥鎖被釋放。這里,狀態(tài)文件的互斥鎖可由被監(jiān)控進(jìn)程的實(shí)例釋放,也可由操作系統(tǒng)在發(fā)現(xiàn)被監(jiān)控進(jìn)程的實(shí)例退出時(shí)釋放。另外,本發(fā)明實(shí)施例中,監(jiān)控進(jìn)程在發(fā)現(xiàn)一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例狀態(tài)文件存在且已被加鎖后,若發(fā)現(xiàn)該狀態(tài)文件中的狀態(tài)信息在預(yù)設(shè)時(shí)長(zhǎng)如5分鐘內(nèi)未被更新,則認(rèn)為該被監(jiān)控進(jìn)程的該實(shí)例出現(xiàn)異常,無(wú)法提供服務(wù),如實(shí)例掛死。此時(shí)監(jiān)控進(jìn)程可采取實(shí)例異常操作如記錄日志、重新啟動(dòng)該被監(jiān)控進(jìn)程的實(shí)例等。 另外,本發(fā)明實(shí)施例中,還可在狀態(tài)文件中設(shè)置管理字段,監(jiān)控進(jìn)程在需要對(duì)被監(jiān)控進(jìn)程的一個(gè)實(shí)例進(jìn)行管理時(shí),可將管理指令寫入該區(qū)域,被監(jiān)控進(jìn)程的實(shí)例定時(shí)從該區(qū)域中讀取指令,若讀取到,則根據(jù)該指令執(zhí)行相應(yīng)操作。由于同一操作系統(tǒng)下,同一時(shí)刻只允許一個(gè)進(jìn)程的一個(gè)實(shí)例對(duì)特定文件的特定區(qū)段加鎖,且一旦該實(shí)例退出,該鎖必然釋放,本發(fā)明實(shí)施例中,被監(jiān)控進(jìn)程的實(shí)例啟動(dòng)后,對(duì)其狀態(tài)文件加互斥鎖,這樣,監(jiān)控進(jìn)程就能夠根據(jù)狀態(tài)文件是否存在和是否已加互斥鎖,準(zhǔn)確判斷出被監(jiān)控進(jìn)程的實(shí)例是否正常運(yùn)行,不會(huì)出現(xiàn)誤報(bào)。另外,在一個(gè)操作系統(tǒng)下,相對(duì)于Socket資源來(lái)說(shuō),文件系統(tǒng)的資源幾乎是無(wú)窮盡的,本發(fā)明實(shí)施例中,為不同被監(jiān)控進(jìn)程的不同實(shí)例分配不同的狀態(tài)文件,每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例將其狀態(tài)信息寫入其狀態(tài)文件中,這樣,就能夠確保不同被監(jiān)控進(jìn)程的不同實(shí)例使用不同的狀態(tài)文件,而不會(huì)產(chǎn)生沖突,從而可實(shí)現(xiàn)對(duì)多實(shí)例進(jìn)程的各個(gè)實(shí)例的監(jiān)控。另外,文件系統(tǒng)對(duì)操作系統(tǒng)的依賴性較Socket資源要小得多,因此采用本發(fā)明實(shí)施例,監(jiān)控進(jìn)程狀態(tài)將更加穩(wěn)定、可靠。此外,本發(fā)明實(shí)施例中,監(jiān)控進(jìn)程還可將管理指令寫入被監(jiān)控進(jìn)程的實(shí)例的狀態(tài)文件中,從而在監(jiān)控進(jìn)程的同時(shí),還可對(duì)進(jìn)程進(jìn)行管理。為了提高效率和資源占用率,本發(fā)明實(shí)施例中,被監(jiān)控進(jìn)程和監(jiān)控進(jìn)程可使用文件-內(nèi)存映像的方式訪問(wèn)狀態(tài)文件,無(wú)需顯式地對(duì)文件進(jìn)行讀、寫操作。目前常用的操作系統(tǒng)如Windows、Linux、Unix、Mac OS等均支持文件-內(nèi)存映射訪問(wèn)方式。圖2為本發(fā)明實(shí)施例提供的進(jìn)程狀態(tài)監(jiān)控單元的組成圖,如圖2所示,其主要包括狀態(tài)文件信息獲取模塊21和監(jiān)控模塊22,其中狀態(tài)文件信息獲取模塊21 獲取每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)的狀態(tài)文件信息,根據(jù)獲取的信息記錄被監(jiān)控進(jìn)程ID+實(shí)例ID與狀態(tài)文件ID的對(duì)應(yīng)關(guān)系,其中,所有狀態(tài)文件互不重疊。監(jiān)控模塊22 根據(jù)狀態(tài)文件信息獲取模塊21記錄的被監(jiān)控進(jìn)程ID+實(shí)例ID與狀態(tài)文件ID的對(duì)應(yīng)關(guān)系,定時(shí)輪詢各被監(jiān)控進(jìn)程的各實(shí)例的狀態(tài)文件,若發(fā)現(xiàn)一個(gè)實(shí)例的狀態(tài)文件被加互斥鎖,則從該狀態(tài)文件中讀取該實(shí)例寫入的狀態(tài)信息。圖2所示的進(jìn)程狀態(tài)監(jiān)控單元還可包括狀態(tài)文件分配模塊,用于為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配一個(gè)狀態(tài)文件,且所有狀態(tài)文件互不重疊,并將為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配的狀態(tài)文件信息發(fā)送給狀態(tài)文件信息獲取模塊21。監(jiān)控模塊22還可包括用于當(dāng)發(fā)現(xiàn)一個(gè)被加互斥鎖的狀態(tài)文件中的狀態(tài)信息在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)未被更新時(shí),執(zhí)行實(shí)例異常操作的子模塊。監(jiān)控模塊22還可包括用于當(dāng)發(fā)現(xiàn)一個(gè)狀態(tài)文件被加互斥鎖后,定時(shí)從該狀態(tài)文件中讀取實(shí)例寫入的資源占用信息或錯(cuò)誤信息的子模塊。圖2所示的進(jìn)程狀態(tài)監(jiān)控單元還可包括管理模塊,用于當(dāng)需要對(duì)一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例進(jìn)行管理時(shí),將管理指令寫入該實(shí)例的狀態(tài)文件中,以便該實(shí)例從該狀態(tài)文件中讀取該指令,并執(zhí)行相應(yīng)操作。
8
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種進(jìn)程狀態(tài)監(jiān)控方法,其特征在于,預(yù)先設(shè)定每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)一個(gè)狀態(tài)文件,且所有狀態(tài)文件互不重疊,該方法包括一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例啟動(dòng),該實(shí)例在自身的狀態(tài)文件上加互斥鎖,并將自身從啟動(dòng)到停止過(guò)程中的各個(gè)狀態(tài)信息寫入該狀態(tài)文件中;監(jiān)控進(jìn)程從所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件中讀取狀態(tài)信息。
2.如權(quán)利要求1所述的方法,其特征在于,所述狀態(tài)信息為正在啟動(dòng)、已經(jīng)啟動(dòng)、正在停止或已經(jīng)停止。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述監(jiān)控進(jìn)程從所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件中讀取狀態(tài)信息之前進(jìn)一步包括監(jiān)控進(jìn)程定時(shí)查詢所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件,判斷是否該狀態(tài)文件不存在或者未加鎖,若是,則確定所述實(shí)例未啟動(dòng)或已停止;否則,執(zhí)行所述從所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件中讀取狀態(tài)信息的動(dòng)作。
4.如權(quán)利要求3所述的方法,其特征在于,當(dāng)監(jiān)控進(jìn)程發(fā)現(xiàn)所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件加鎖時(shí),所述方法進(jìn)一步包括監(jiān)控進(jìn)程發(fā)現(xiàn)所述狀態(tài)文件中的狀態(tài)信息在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)未被更新,則執(zhí)行實(shí)例異常操作。
5.如權(quán)利要求1或2所述的方法,其特征在于,所述該實(shí)例在自身的狀態(tài)文件上加互斥鎖之后進(jìn)一步包括該實(shí)例定時(shí)將自身的資源占用信息寫入自身的狀態(tài)文件中;且,監(jiān)控進(jìn)程定時(shí)從所述實(shí)例的狀態(tài)文件中讀取資源占用信息;或者,該實(shí)例在自身發(fā)生運(yùn)行錯(cuò)誤現(xiàn)象時(shí),將錯(cuò)誤信息寫入自身的狀態(tài)文件中;且,監(jiān)控進(jìn)程定時(shí)從所述實(shí)例的狀態(tài)文件中讀取錯(cuò)誤信息。
6.如權(quán)利要求1或2所述的方法,其特征在于,所述方法進(jìn)一步包括監(jiān)控進(jìn)程在需要對(duì)一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例進(jìn)行管理時(shí),將管理指令寫入該實(shí)例的狀態(tài)文件中,該實(shí)例讀取該指令,根據(jù)該指令執(zhí)行相應(yīng)操作。
7.如權(quán)利要求1或2所述的方法,其特征在于,所述預(yù)先設(shè)定每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)一個(gè)狀態(tài)文件包括監(jiān)控進(jìn)程或預(yù)先設(shè)定的狀態(tài)文件分配進(jìn)程為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配一個(gè)狀態(tài)文件;或者,預(yù)先設(shè)定狀態(tài)文件分配規(guī)則,以便每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例根據(jù)該規(guī)則確定本實(shí)例對(duì)應(yīng)的狀態(tài)文件。
8.一種進(jìn)程狀態(tài)監(jiān)控單元,其特征在于,包括狀態(tài)文件信息獲取模塊獲取并記錄每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)的狀態(tài)文件信息,其中,所有狀態(tài)文件互不重疊;監(jiān)控模塊根據(jù)狀態(tài)文件信息獲取模塊記錄的每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例的狀態(tài)文件信息,定時(shí)輪詢各被監(jiān)控進(jìn)程的各實(shí)例的狀態(tài)文件,若發(fā)現(xiàn)一個(gè)實(shí)例的狀態(tài)文件被加互斥鎖,則從該狀態(tài)文件中讀取該實(shí)例寫入的狀態(tài)信息。
9.如權(quán)利要求8所述的單元,其特征在于,該單元進(jìn)一步包括狀態(tài)文件分配模塊為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配一個(gè)狀態(tài)文件,且所有狀態(tài)文件互不重疊,并將為每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例分配的狀態(tài)文件信息發(fā)送給狀態(tài)文件信息獲取模塊。
10.如權(quán)利要求8或9所述的單元,其特征在于,所述監(jiān)控模塊進(jìn)一步包括用于當(dāng)發(fā)現(xiàn)一個(gè)被加互斥鎖的狀態(tài)文件中的狀態(tài)信息在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)未被更新時(shí),執(zhí)行實(shí)例異常操作的子模塊。
11.如權(quán)利要求8或9所述的單元,其特征在于,所述監(jiān)控模塊進(jìn)一步包括用于當(dāng)發(fā)現(xiàn)一個(gè)狀態(tài)文件被加互斥鎖后,定時(shí)從該狀態(tài)文件中讀取實(shí)例寫入的資源占用信息或錯(cuò)誤信息的子模塊。
12.如權(quán)利要求8或9所述的單元,其特征在于,該單元進(jìn)一步包括管理模塊當(dāng)需要對(duì)一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例進(jìn)行管理時(shí),將管理指令寫入該實(shí)例的狀態(tài)文件中。
全文摘要
本發(fā)明公開(kāi)了進(jìn)程狀態(tài)監(jiān)控方法及單元。預(yù)先設(shè)定每個(gè)被監(jiān)控進(jìn)程的每個(gè)實(shí)例對(duì)應(yīng)一個(gè)狀態(tài)文件,且所有狀態(tài)文件互不重疊;方法包括一個(gè)被監(jiān)控進(jìn)程的一個(gè)實(shí)例啟動(dòng),該實(shí)例在自身的狀態(tài)文件上加互斥鎖,并將自身從啟動(dòng)到停止過(guò)程中的各個(gè)狀態(tài)信息寫入該狀態(tài)文件中;監(jiān)控進(jìn)程從所述被監(jiān)控進(jìn)程的所述實(shí)例的狀態(tài)文件中讀取狀態(tài)信息。本發(fā)明提高了進(jìn)程狀態(tài)監(jiān)控的準(zhǔn)確性、穩(wěn)定性和通用性。
文檔編號(hào)G06F11/30GK102200941SQ20101013441
公開(kāi)日2011年9月28日 申請(qǐng)日期2010年3月25日 優(yōu)先權(quán)日2010年3月25日
發(fā)明者李方寧 申請(qǐng)人:杭州華三通信技術(shù)有限公司