專利名稱:軟件進程監控的制作方法
技術領域:
本發明涉及一種用以監控和管理進程,如在計算機上運行的請求進程、交 互進程和效用進程的裝置以及計算機可讀介質。
背景技術:
計算機使用進程如請求進程,交互進程,和效用進程實現使用者與計算機 之間的直接通信任務。在多數計算機環境中,每一個進程獨立運行并定義關于 進程開始,終止和其他進程間交互的規則。因此,從一般角度看,這是很難確 定管理進程運行、進程和其他進程之間交互的規則,因為這些規則是遮蔽在進 程的代碼中。最好是能夠提供一個管理和控制進程外部運行的系統,管理進程 開始、終止和其他進程間交互的規則可以被外部定義。這將大大簡化對進程的 控制,使管理進程交互的規則以一個相對簡單的方式讓程序員理解。這些技能在技術上理解,由于各種原因,進程運行在計算機上會產生'故障', 大致意思是說這個代碼不正確操作或以其他方式意外結束。故障是由許多原因 引起的,包括,舉例來說,在進程中存在錯誤,進程接收輸入狀態沒有被編程 響應,由于錯誤或其他原因產生數據或代碼錯誤,內存或緩存溢出,代碼沖突, 及其他。最好能提供一個系統具有外部監控進程檢測任何不當進程操作。此外, 它還將是可取的,在發生故障時,使進程通過執行重新啟動計算機,重新啟動 進程,或兩者兼而有之,自動而不需要任何使用者行為就能夠使進程運行。此 外,它還將是可取的,如果使用為進程預先配置的恢復計劃,進程重新啟動或 是設備重新啟動,提供靈活的方式使進程從故障中恢復。現有技術的另 一個問題是一個進程控制其他進程的方式。在現有技術中, 在一個受控制的方式下, 一個運行的進程沒有能力啟動或終止另一個相關進程。 最好是能夠啟動一個進程具有管理能力,這個能力是在稍后時間,使外部代碼 在特殊情況下終止,在發生故障時,提前配置它的恢復行為。在一個進程需要 終止的情況時,最好提供能夠在進程終止之前實現配置退出處理。因此,應該提供一個裝置,計算機可讀介質,監控和管理客戶端進程的方 法,如計算機上可運行的請求進程,交互進程,和效用進程,具有克服上述現 有技術存在的問題。發明內容本發明實施例所要解決的技術問題在于,提供一種計算機,所述計算機包 含一個處理器和連接到所述處理器的內存。所述內存存儲有監控進程,所述監 控進程擁有運行在計算機上與進程對應的監控線程。監控線程單獨運行或外部 運行對應的進程,從而使處理器能夠使用監控線程外部控制其對應的進程。監 控進程包括一個開始進程,用于從操作平臺接收一個句柄,以響應運行在操作 平臺上的開始進程,創建包含句柄的監控線程用于監控進程。這個進程可定制 允許監控進程與其交互。眾所周知,無論是監控進程和對應的進程, 一個監控 線程可以內部添加到進程中,監控特殊進程間的通信對象(例如信號量,互斥, 事件等)。監控進程可以通過發信號給進程間的通信對象請求終止對應的進程, 觸發進程,執行定制的終止程序終止進程本身。終止進程程序可能涉及存儲數 據,或在終止之前執行其他任務。可以通過其中的各種方式觸發開始進程和終 止進程,并可能源自通過處理器執行另一個運行進程,使用者通過使用界面所 提供的計算機的輸入和輸出單元,與計算機連接的外部設備,計算機的接口單 元,或綜合所述。監控進程基于一個或多個外部規則執行開始和終止請求,即 確定是否在此情況下的一個進程,目標請求進程可以被開始或終止。所述內存 可以儲存一個初始化進程確定一個或多個進程,這些進程在計算機開啟后由處 理器啟動。所述監控進程可進一步構成一個故障檢測和恢復模塊存儲系統碰恢 復計劃。所述故障恢復計劃定義一個或多個由處理器執行的函數,以恢復故障 進程。處理器執行恢復計劃自動恢復故障進程,無需計算機使用者參與。故障 檢測和恢復模塊包括進程一個進程狀態表,存儲正常終止標識,如果進程終止 正常,所述終止標識是由監控進程設置,如果由于故障導致的進程終止,則不 是由進程設置。所述監控進程還包括一個事件處理器,接收來自外部監控線程 的退出通知信號,用于終止進程,并轉發給退出通知所述故障檢測和恢復模塊 以決定進程是否正常終止或由于故障導致的終止。在此基礎上的決定,所述故 障事件檢測和恢復模塊可確定是否一個進程終止正常或是由于故障,請求所述模塊執行故障恢復計劃。本發明實施例還提供了 一種計算機,所述計算機包括處理器;與所述處理器連接的內存。所述處理器存儲一個故障檢測和恢復模塊確定恢復方案,由所述 處理器執行的一個進程。所述故障檢測和恢復模塊可以自動檢測系統故障的進 程,并逐步恢復,從故障的進程中,執行恢復計劃,而無需采取任何使用者參 與的計算機行動。為進程恢復計劃可以被專門定義。反過來說,恢復計劃可以 是一個默認計劃用于恢復在沒有恢復計劃的進程故障。恢復計劃可支配的計算 機被重新啟動,或進程重新啟動,或者兩者兼有。在一些實施例中,監控進程儲存在內存里,可進一步包括一個事件句柄進 程接收退出通知信號從進程控制模塊,顯示該進程已終止。該事件處理器通知 故障檢測和恢復模塊的退出通知信號,信號來自終止進程和進程控制模塊。在 一些實施例中,進程控制模塊有一個隊列存儲開始和終止執行請求,由進程控 制模塊允許按規則執行。在一些實施例中,監控進程包括一個初始化進程配置, 以確定開始和終止執行請求后,啟動計算機,初始化進程輸入配置的開始和終 止請求進入隊列為4丸行后,啟動計算才幾。開始請求和終止請求在隊列中可以源 自不同的來源,包括另一運行進程中,連接處理器的輸入裝置,由一個使用者, 或者是一個連接到處理器的接口單元接收請求,或者是由外部設備,或者是組 合。在不同的故障進程之后,故障恢復計劃可以是確定裝置是否能夠啟動,在 一個或多個進程重新啟動,或兩者兼而有之。故障檢測和恢復模塊提供的任何 進程啟動或重新啟動初始化進程輸入到執行的隊列后,重新啟動計算機或重新 啟動一個進程。其中故障恢復計劃,可以是一個默認的恢復計劃被用在沒有故 障恢復計劃的進程中。監控線程被并入在一個客戶端進程中,如果是由進程控 制才莫塊標識纟丸行的進程終止,客戶端進程可以包括終止進程確定在進程終止前 執行進程。監控進程,或更具體地說,進程控制模塊,可以包括一個為開始進 程的啟動進程,終止進程的終止進程。本發明的實施例是計算機可讀介質計算機進程(即監控進程),以執行一 個或一個以上的上述描述的功能,監控進程由計算機執行。
概括描述本發明內容之后,根據附圖給出參考說明,所述附圖無需按規定比例繪制,其中圖1是本發明一個具體實施例的結構圖,圖中計算機含有一個存儲器(即 計算機可讀介質),該存儲器已存儲了監控進程,該監控進程用于控制一個或多 個進程和依照本發明內容自動從進程故障中恢復;圖2是本發明方法的一個具體實施例,該方法由監控進程執行,該監控進 程監控和控制進程,所述進程使用進程外部的監控線程,該方法還用于執行進 程故障恢復;圖3是本發明方法的一個具體實施例,該方法由監控進程的啟動進程執行, 用于啟動進程和創建一個監控線程來控制進程;圖4是本發明方法的一個具體實施例,該方法由監控進程的終止進程執行, 用于終止進程和通知退出進程終止時的故障檢測結果和恢復模塊;和圖5是本發明方法的一個具體實施例,該方法是終止進程通知用于終止的 進程的監控線程,并以此來啟動定制的退出進程。
具體實施方式
為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖對本發明 作進一步地詳細描述,只是對一些,并不是對所有的發明實施例進行闡述。事 實上,本發明有很多表現形式,并不僅僅限于所述的表現形式。當然,闡述的 這些實施例符合對應的法律要求。定義'和/或'是指是指部分,或全部是由前邊和后邊的條件決定的。因此,"A, B,及/或C",是指"A、 B、 C中的一個,或者A, B,和C的全部。"'計算機',是用在這里,是指通常的技術屬性條件。它是指一種裝置具有內 存和處理器接收從一個內存,使用者,或外部設備的輸入數據,處理這些數據 的基礎上,控制進程儲存在內存,處理輸入數據并產生輸出數據。'計算機可讀介質'是一個'內存。''內存'可以是一個隨機存儲器(RAM),只讀存儲器(ROM),硬盤驅動 器存儲單元,磁帶機,光盤(光盤版),數字光盤(DVD ),或者以數字或 模擬形式存儲的其他任何有數據儲存能力的設備,無論是在光學,電子,磁力或其他方面。'內存'包括在其定義中的任何硬件,軟件或軟件和硬件相結合,可 以用計算機的處理器來讀取,并可能存儲計算機進程或數據。'操作平臺'是指一個操作系統或操作環境控制的分配和使用的硬件資源,如內存,處理器時間,硬盤空間,輸入和輸出單元和外圍設備。操作平臺包括有 windows xp , windows 2000 , windows ce系統,windows 98 , windows NT , Mac系統,Unix , Linux系統,AJX , I系列,Z系列,Solaris和其{也。'進程',基本上是可以由處理器執行的任何代碼,。 一個進程可以是一個請 求進程,交互進程,或效用進程,例如。'處理器'可以是一個微處理器,微控制器,可編程門陣列(PGA),現場可 編程門陣列(FPGA ),編程陣列邏輯(PAL),可編程邏輯陣列(PLA), 并可能與其他形式能接收和句柄輸入數據根據編程指令產生輸出數據。'發送'或'傳遞'是指傳輸數據的一個元素或進程到另一個。它可以包括傳送的數據或信號,從一個元素到另一個,或有效地傳輸這些數據或信號,使數據句 柄的一個單元或模塊傳輸到另 一單元或模塊。在一個單詞后的'(s )'或'(es)'或'(ies)',是指'一個或一個以上的意思。'因此,'process (es)'就是'一個或一個以上的進程。'計算機10的概要描述 圖1是本發明實施例計算機10的示意圖。計算機10個包括一個處理器12 個, 一個內存14 , 一個輸入單元16 ,是一個輸出單元18 ,可選電源20 , 一個接口單元22(IU),和通道24 。處理器12與內存14通信、輸入單元16 , 輸出單元18 ,電源20 ,和接口單元22經過通道24連接進行通信。處理器 12與外部設備、計算機10的接口單元22連接進行通信。處理器26內存14存儲一個或多個由處理器12執行的客戶端進程26。客戶端進程或 進程26包括一個請求進程,交互進程,效用進程,或這些進程中的多數相結合。 每個客戶端進程26由處理器12根據計劃執行各項功能。在正常運行,處理器 12同時運行進程26的時間不同。換言之,處理器的12根據自己的時間分配為 每一個正在運行的進程分配時間和按順序執行。提供特殊的計算機10和進程26 ,它可以執行,在不以任何方式有意淡化 發明的最廣范圍,像這樣的計算機和進程都可以應用,計算機10可實施作為一個手持設備,例如通過使用UPS公司的驅動進程和包句柄的信息采集裝置(DIAD), —個客戶端進程26可由是信息采集裝置(DIAD)執行,也就是請 求句柄的獲得和傳送。這個請求可以通過編程從一個外部設備接收數據。這個 數據可能顯示地址,而處理器就是要提供數據傳輸路線,及地址,而這些數據 是從手持設備中獲得。這些應用可以編程允許手持設備使用輸入單元16和輸出 單元18查看有關接收和傳輸的數據包,如終止接收及傳輸地址。它可能會進一 步獲得有關接收和傳輸的數據,如數據顯示的是,包句柄設備獲得或傳輸一個 包的時間和日期,數據簽名表示確認接收數據和傳輸數據等。此外,請求可以 通過編程使驅動進程接收通過發單人發送的包單。計算機10以無線方式或直接 通過接口單元22與外部裝置連接,例如通過對接站,跟蹤服務器等,從外部設 備接收數據,并提供獲得的數據傳送給外部設備。獲得的數據可以提供給以計 費,物流,包裝跟蹤等為目的外部設備。此外,進程或進程26 ,可以由一個或多個交互進程組成,使計算機10與 外部設備通信。例如, 一個交互進程,可以檢測到計算機IO是連接到對接站允 許收費,其電源來源的20可實施作為充電電池。為響應收費站的連接事件,交 互進程,可以處理器12執行,使計算機10與另一裝置初始化通信,觸發傳輸 數據,或其他活動。所述例子進程26存儲在計算機10中執行。這些普通的技巧在技術中被其 他請求進程,交互進程,效用進程中所應用,不管是否與接收或傳輸數據包有 關,被計算機10根據請求的目的所使用。句柄的包的內容是可仿效的,本發明 所揭示內容可以適用于整個與句柄包和傳輸包無關用途。進程26提供各自的監控線索44,其中包括進程間的通信對象的51 (例如, 一個事件,信號量,互斥,或其他機制)與句柄56 ,使進程控制模塊30終止 運行進程26 。此外,監控線程44,可l是供與終止(TERM)代碼60其中確定 任何句柄由進程26執行當監控進程28發出終止信號時。這種句柄可以涉及存 儲數據或執行其他進程終止之前的任務。對于這些特性在以下進一步詳述,監控進程28內存14存儲一個監控進程28由處理器的12監控,并在必要時控制任何運 行于計算機10的進程26 。監控進程28允許運行進程要求啟動或終止的另 一個 進程。在本實施例圖1中,監控進程28的有利組成是由進程26分開的代碼。因此,它可以控制這種過程,甚至在發生一個或一個以上的進程故障。換句話說,監控進程28有能力來執行計算機11,不會受進程26的狀況影響。在一個 或多個進程26故障時,監控進程28有恢復能力。監控進程的28由一個過程的控制模塊30組成,故障檢測和恢復模塊32 個,以及一個事件處理器34 。上述每個模塊在下文詳細討論。進程控制模塊30進程控制模塊30具有以下功能(l)開始或終止任何的客戶端進程;(2), 以確定客戶是否進程運行;(3)為使另外一個客戶進程去啟動或終止一個客戶端進程。在一般的情況下,進程控制模塊30,包括執行開始請求43的開始進程38, 執行終止請求43的終止進程54。進程控制模塊30還包括一個隊列39存放開始 和終止請求43,先入先出(先進先出)執行開始進程38和終止進程54,當開 始進程時為每個運行進程26創建一個或多個監控線程47,使監控進程28監控 進程故障。開始進程38從隊列39接收開始請求43,并決定根據規則41 ,判 斷是否每個請求可以被執行。如果是的話,那將創建一個監控線程47外部進程 26 ,使這一進程受到監控,以確定它是否已經終止。如果不符合規則41,開始 進程38 ,可以拒絕開始請求43或把它退回給排隊39到一個或更多的突發事件 發生允許進程執行。終止進程54句柄隊列39中的所有終止請求43 。當乂人隊列 39中接到終止請求43,用規則70評估請求,以決定是否可以執行終止請求。 如果是的話,它標志著進程26中的對象51是目標請求,以使用56句柄進程間 的通信對象51,從而導致進程在終止前4丸行其定制終止代碼60。終止進程54 也通知故障檢測和恢復模塊32的進程,當執行一個終止請求,以使模塊獲知這 一進程的終止是正常的,還是由于故障導致的。反之,如果規則70不允許終止 進程54執行終止請求,那么隊列中的終止請求在允許執行的情況下才被執行, 或者它可能完全拒絕終止請求。以何種方式終止或開始請求介紹介紹進程控制 模塊30 ,更具體地說,隊列39 ,可以從詳細討論中產生幾個方案。計算機10個載入及執行進程控制模塊30后啟動電腦。進程控制模塊30包 括一個初始化(INIT)函凄t36,其中定義了一系列的一個或多個進程26,它們 是由處理器12響應計算才幾10啟動開始。此外,初始化函數36 ,可確定一系 列的一個或多個進程由計算機10重新啟動后執行,這系列進程不需要重新啟動后執行同樣的進程。監控進程28配置帶有啟動裝置的操作平臺。處理器執行監控進程28為定義一系列初始化進程運行初始化函數36發動開始進程請求。在 發生不止一個進程運行時,如前所述,處理器通常多任務之間為正在運行的進 程26分配句柄時間和正在運行的進程。一個正在運行的進程26可以請求處理器12開始或終止另一個進程。更具 體地說,客戶端進程26可以傳送請求43至隊列39通過開始進程38啟動執行, 或啟動終止進程54終止進程, 一個目標進程中所指定的請求。請求43可以包 括數據顯示目標進程中為開始或終止請求和進程發起的請求。當請求43進到隊 列39的隊尾,通過開始進程38或終止進程54分析,為適宜的類型請求的,這 就決定了目標進程是否是一個由請求進程開始或終止。在此基礎上由規則41 , 70所確定的一個或一個以上的幾種標準,開始進程38確定目標進程是否可以開 始或終止。在開始進程38和終止進程54的一個具體描述中,請求進程是通過 規則41 , 70分配一個特權開始或終止目標進程,或者反過來說,進程可以分 配一個限制,禁止它開始或終止目標進程,這取決于進程員如何分配特權和限 制給進程26 。此外,如果有兩個或兩個以上被確定是目標進程,它可能是開始 進程38的規則41或終止進程54的規則70可以編程評估相對優先的起始進程 的請求。例如,如果一個開始請求由一個進程發起,處理器12可以執行監控進 程28 ,以確定是否按規定41, 一個進程先前發出的終止請求43當收到開始請 求時仍然有效成為目標進程,此進程具有從提出請求的進程中有優先權的請求。 如果是的話,那么處理器12可以拒絕開始請求進程開始請求43,或可暫緩執行, 直到發生一個或一個以上的事件,如終止進程終止請求具有更優先的請求。然 后,再由處理器12執行開始進程34以導致請求進程開始。此外,監控進程28 利用內部隊列39使開始請求和終止請求按順序執行。如有需要,消除不相干的 請求,使隊列優化,例如,如果一個開始進程的請求在一個終止請求后,開始 就請求可能會終止以節約處理時間。此外,當通過輸入單元16從一個4吏用者收到請求43,進程26開始或終止。 例如, 一個使用者的計算機10可以操作輸入裝置16產生的請求43提供給處理 器12開始或終止一個或多個進程26 。隊列39擁有請求43直到根據規則41 , 70由開始進程38或終止進程54執行。然而,另一種方式,進程26可以開始或終止響應外部設備產生的請求43,請求43由處理器12通過接口單元22接收。請求43在隊列39中直到由開始進 程38根據規則41或終止進程54根據規則71執行。在圖1中所述類型的請求43,作為外部啟動/終止請求55 ,因為它們源自 或引發外界的進程控制模塊30。除上述初始化函數36和外部啟動/終止請求43 ,開始或終止請求43可來 自故障檢測和恢復模塊32 。以何種方式出現,在稍后部分對故障檢測和恢復模 塊32的詳細細節進行"i侖述。當進程26被啟動,操作平臺46創建一個句柄48確定該進程,并提供同樣 的開始進程38 。開始進程38監控句柄48 ,由一個監控線程47創建和存儲在 進程控制模塊30中。當一個進程26終止,才喿作平臺46無效其句柄48 ,造 成監控線程47警報進程已經終止。這會導致監控線程47產生退出通知信號, 給事件處理器34由故障檢測和恢復模塊32著手檢查,以確定進程的終止是正 常還是故障導致終止。如前所述, 一個客戶端進程26可以修改,就如它可以由監控進程28控制。 終止請求從監控進程28至客戶端進程26的通信是由唯一的系統標識符支持, 它可以由一個事件,信號量,互斥,或其他機制實施計算機中進程間的通信。 一個監控線程("ST" ) 44,被編程到客戶端進程26 -R,在等待由監控進程 28發信號給對象51 (例如, 一個事件,信號量,互斥,或其他機制)。當監控 進程28執行一個終止請求,它利用句柄56發信號給對象51 ,啟動監控線程 44,以激活服務終止(TERM)函數60,這個函數可被編程到終止進程26 。當 客戶端進程被終止,無效進程句柄48由操作平臺46發出信號給對應的監控線 程47,在監控進程28中生成退出通知傳送到事件處理器34 ,從而激活故障檢 測和恢復模塊32 。在正常操作下,有很多運行于計算機10的客戶端進程26 。因此,在圖1 中監控線程47-1通過47 - x對應于每一個過程26 -R1 ,通過26 -RX運行于計算 機10 。' R '表示進程26正在運行和'X '代表運行于計算機11的客戶端進程的數 量。監控線程47-l通過47 - X繼續運行在進程控制模塊30,只要他們對應的 進程26正在運行。在圖1中,這些沒有運行的進程由數字'26-NRl-26-NRQ '標識,'NR'標識進程的狀態是沒有執行,'Q'是沒有被執行的進程編號。當執行終止請求43 ,終止進程54設置一個正常終止標識對應故障斥企測和恢復模塊32中的進程狀態表77中的進程26。設置這個標識,表明進程26已由 終止進程請求終止。當一個進程26終止運行,操作平臺46使進程句柄48無效。 將這種句柄無效發信號給對應的進程控制模塊30中的監控線程47,使之產生退 出通知信號給事件處理器34從而警報故障檢測和恢復模塊32檢查進程是否正 常終止還是故障終止,正常終止標識存儲在進程中狀態表77。故障;險測和恢復 模塊32和操作的細節在下面闡述。故障檢測和恢復模塊32故障檢測和恢復模塊32提供下列功能(1 )它允許一個客戶端進程配 置如何使模塊恢復進程故障事件;(2 )模塊能夠保持所有運行在計算機10的 使用者進程的狀態(即,數據顯示進程是否在運行,是否正常終止或故障終止); (3 )模塊監控客戶端進程的故障;(4)在檢測故障進程后,模塊為故障進程 執行配置的恢復計劃。如圖1所示,故障檢測和恢復模塊32存儲故障恢復計劃75-1通過75 -Y (Y是計劃的數目),為計算機1 0中的一個或多個進程2 6。故障恢復計劃 75-1至75 -丫可專門配置一個或一個以上對應的進程2 6,允許計算才幾1 0以一 個定制的方式從故障進程26中恢復。舉例來說,在故障進程后,故障恢復計劃 75可以指定計算機10恢復故障進程26是通過重新啟動計算機或者重新啟動故 障進程,或者兩者兼有。如果一個定制的計劃75是沒有界定為一個進程26,那 么故障檢測和恢復模塊32使用默認計劃75 - Z恢復故障進程。故障檢測和恢復模塊32擁有進程狀態表77顯示哪些進程正在運行,而哪 些進程沒有正在運行。故障檢測和恢復模塊32擁有正常終止數據,正常終止數 據來自終止進程54,終止進程54為任何進程正常終止以反映終止是不是故障導 致的。如果發現有任何進程終止,是否正常終止或由于故障,操作平臺46發信 號給監控進程的監控線程47,為這個進程,通過無效進程句柄48 ,然后通知 事件處理器30途經退出通知事件激活故障檢測和恢復模塊32 。為了響應退出 通知信號,故障檢測和恢復模塊32更新進程狀態表77,表示進程生成退出通知 已經終止。此外,故障檢測和恢復模塊32在進程狀態表77中檢查對應的正常 終止標識,以確定該進程是否已正常終止。如果是的話,進程檢測和恢復模塊 32需要執行,沒有進一步處理的終止進程。反過來說,如果進程終止標識顯示 進程終止異常,然后故障檢測和恢復模塊32執行故障恢復計劃75對應的故障進程以恢復故障。如前所述,故障恢復計劃75可專門配置一個進程26以確定 如何在計算機恢復故障進程。在一個對應的故障進程完全恢復后,故障恢復計 劃75是圖l從75-l至75-Y中指定一個,指明計算機10是否應啟動,故障進 程重新啟動,或兩者兼而有之。此外,這種計劃75可以被定義表明是否有其他 進程必須重新開始或重新啟動,以恢復故障。故障恢復計劃75并不是專門為進 程26定義的,故障檢測和恢復模塊32用默認恢復計劃75 - Z恢復運行在計算 機10上的故障和進程。為故障進程執行故障恢復計劃75導致產生一個或更多 的開始或終止請求43,檢測和恢復模塊32規定更新初始化函數36 ,隊列39 , 或者兩者兼有。事件句柄34事件處理器34響應事件所產生在監控進程28內部的監控線程47 。更具體 地說,當一個進程的26通過執行終止函數60和終止代碼61退出,終止進程 發信號給監控進程28的監控線程47由句柄48無效終止進程,從而導致監控進 程產生退出通知事件通知事件處理器34,終止進程26。此外,如果一個進程26 由于故障終止異常,監控進程28以類似的方式通知事件處理器34。響應退出通 知,事件處理器34激活故障檢測和恢復模塊32確定進程是否正常終止或是故 障終止,在進程26退出前,進程狀態表77中的正常終止標識或不是正常終止 標識由終止進程54設置。使用監控線程監控和控制進程的方法圖2是使用外部運行在計算機10上的進程相關聯的監控線程47監控一個 或多個進程26的流程圖。監控進程28被編程由圖1中的計算機10執行,以實 現圖2中的方法步驟。圖2中的步驟200,裝置10啟動,步驟202 ,為響應啟動,裝置10執行 一個初始化(初始化)進程36 。這會導致處理器12啟動由初始化進程36定義 的一個或多個進程26。更具體地說,通過其#1行,初始化進程36發送一個或多 個開始請求23為開始進程38的目標進程26。初始化進程36編程啟動特殊的進 程26。步驟204 ,開始進程38從隊列39收到啟動請求(s ) 43并同時執行。 當每個進程26開始,為啟動進程26,開始進程38從裝置的4喿作平臺46收到句 柄48 。每個句柄48有能力確定各自的外部進程26-R的運行狀態。客戶端進 程26編程創建一個監控線程44開始并把這種監控線程44連同進程間通信對象51和句柄56合并到進程26中。另外,開始進程38生成監控線程47 ,在內部 合并對象53與句柄48 ,因此,使監控進程28可以監控進程26在外部的的運 行狀態。步驟206 ,開始進程38收到由各種可能的來源所產生的外部開始請求 (s ) 43,包括另一個運行進程26 ,使用者的操作輸入單元16, —個通過接 口單元(IU) 22的外部設備,或結合所述。開始進程38可以執行時在先處理 隊列請求中的開始請求(s ) 43。假設請求(s ) 43可按照規則41執行, 開始進程38啟動進程(es) 26 ,從操作平臺46獲得對應的句柄(s ) 48 , 并創建一個監控線程(s ) 47 ,合并各自的對象53和句柄48,使進程(es) 26可以被監控。如上所述,進程26創建它們自己的監控線程44,合并從操作 平臺46接收的進程間的通信對象句柄56,使進程控制模塊30控制進程26 。步驟208,事件處理器34等待來自監控線程(s)47的退出通知,響應對應 通過"^喿作平臺46無效的句柄(s )48,顯示對應進程的26已經終止。步驟210, 為響應事件處理器的退出通知檢測,故障檢測和恢復模塊32執行,以確定是否 退出通知是由于正常終止還是進程26的故障終止。模塊32執行檢測函數以確 定終止進程54是否在進程26終止之前在進程狀態表77中設置了 一個正常的終 止標識。如果終止進程54設置了正常終止標識,進程沒有故障返回控制給步驟 208其中處理器34繼續監控每個運行進程退出通知。反過來說,如果步驟212 進程沒有在進程狀態表77中設置正常終止標識,那么這個進程是由于故障終止 的,此情況下,仍然控制與故障檢測和恢復模塊32更新一套初始化進程26 , 以重新啟動基于存放在進程狀態表77中重新啟動標識的值。它還根據故障進程 26的故障恢復計劃75設置啟動和/或重新啟動標識。如果沒有為故障進程26指 定恢復計劃75,那么模塊32用默認計劃75-Z設置(或重新設置)啟動和/或重 新啟動標識以恢復故障。步驟216 ,模塊32確定是否故障恢復計劃請求重新啟 動計算機IO 。如果是的話,由處理器12執行步驟200重新啟動裝置。反過來 說,如果沒有設置重新啟動標識,則進入步驟218,處理器12執行模塊32引起 重新啟動進程,標識需要為計劃75被執行重新啟動進程狀態表77。如果處理器 的執行模塊32表明沒有進程需要重新啟動,則進入步驟208,事件處理器34繼 續監控運行進程退出通知。如果模塊32決定步驟218重新啟動是必要的,在步 驟204則模塊32傳遞開始請求43排隊等待開始進程38執行以啟動步驟214中恢復計劃指定的進程。執行步驟204后,控制進入步驟208,事件處理器34使 用對應的監控線程47監控正在運行的進程26。圖3是本發明方法的一個具體實施例,所述方法用于啟動裝置10中的進程 26。步驟300,監控進程或客戶端進程26-R發起開始請求43請求啟動目標進 程26-NR。開始請求43存儲在隊列39中等待開始進程38執行。步驟302,開 始進程38啟動新的進程26 。開始進程38請求操:作平臺46啟動請求的進程26。 開始進程38從操作平臺46接收開始進程的句柄48,并將句柄保存在內存。客 戶端進程26合并一個監控線程44、 一個對象51和一個句柄56 ,使它能夠被 監控進程控制,步驟304,開始進程38在監控進程28內創建了一個靜態的監控 線程47、 一個對象53和一個句柄48,當開始客戶端進程的句柄^皮無效時,靜 態的監控線程47、對象53和句柄48被激活(即,當進程終止)。激活的監控線 程47使它發出退出通知給事件處理器34,事件處理器34順序警告故障檢測和 恢復模塊32檢查是否進程的退出是正常的,或因故障導致退出。圖4是本發明方法的一個具體實施例,所述方法用于終止裝置10中的進程 26。步驟400監控進程28或客戶端26 -R發出終止請求43給另 一個進程26 -NR。終止請求43排隊等候,直至它可以由終止進程54執行。步驟402終止進 程54確定進程被終止后是否應該重新啟動。它做這個決定是根據規則70 ,故 障恢復計劃75 ,或者兩者兼有。步驟402如果終止進程54確定進程不應被重 新啟動,那么進入步驟404 ,它給進程設置了對應的標識以表示進程在終止后 沒有被重新啟動。相反,在步驟402中,如果終止進程確定進程被終止后應該 重新啟動,進入步驟406,則在表77中設置對應的標識表示這樣的進程在被終 止后應該被重新啟動。步驟408 ,終止進程38由處理器12執行確定裝置10在 目標進程終止后是否應該重新啟動。如果不是的話,進入步驟410,終止進程 54設置對應的標識表示裝置IO在目標進程終止后不應該被重新啟動。反過來說, 在步驟408中如果終止進程54確定裝置10在目標進程終止后應該重新啟動, 則進入步驟412,終止進程54設置對應的標識在進程狀態表77中。步驟414, 終止進程54發信號給客戶端進程的監控線程44中的進程間通信對象51,同樣 發出終止請求到目標進程26 。圖5是本發明方法的一個具體實施例,所述方法用于終止在裝置10中執行 的的客戶端進程26。步驟500,客戶端進程26根據自己的代碼正常執行客戶端句柄。沒有終止請求,步驟500中正常客戶端句柄通過正常終止過程26 。然而, 在這種情況下,步驟502,終止進程54為進程26發送一個終止請求給監控線程 44。終止請求通過發信號給監控線程44的進程間通信對象激活進程26的監控 線程44。步驟504 ,在執行的終止代碼61之前終止執行之前,根據編程60進 程26定制退出處理。可選擇的方式在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和 潤飾也視為本發明的保護范圍。舉例來說,故障恢復計劃75并不一定要存儲在 故障檢測和恢復模塊32中,這些計劃可以存儲在內存14的任何地方,除在揭 示的^f莫塊之外或在各自進程26的監控線程44或47內。同樣地,當 一個進程26 通過對應的監控線程44發信號退出時,終止代碼60定義代碼執行,監控線程 44與正在運行的進程26分開存儲,當監控線程44被發信號退出時進程26可被 重新獲得執行。進程狀態表77不必被存儲在故障檢測和恢復模塊32 ,但可被 儲存在內存14的另一個容易到達模塊32和事件處理器34位置。雖然規則41 , 70通常是與進程26分開存儲的,本規則適用于某一特定進程26可被存儲在這 樣的進程內,或者存儲在有可能不利遮蔽規則的相關監控線程44。如果沒有偏 離范圍的發明,進程控制模塊30,事件處理器34和故障檢測和恢復模塊32是 可以相互結合成較大的或劃分成較小的代碼段根據他們的函數作用。這些和其 他的修改在發明的范圍內被理解。本發明在這里闡述的修改和具體實施例在技術上被理解,在上述描述和相 關附圖提出了一些有益效果。因此,以上所揭露的僅為本發明一種較佳實施例 而已,當然不能以此來限定本發明之權利范圍,因此依本發明權利要求所作的 等同變化,仍屬本發明所涵蓋的范圍。產業適用性本發明各實施例所揭露和要求保護的計算機及介質,通過使計算機自動檢 測和恢復進程的故障,而具有產業適用性。
權利要求
1、一種計算機,其特征在于包括存儲有監控進程的內存,所述內存包括進程控制模塊,其基于對客戶端進程外部定義并存儲在所述內存中的規則開始或終止客戶端進程,所述進程控制模塊通過請求操作平臺啟動客戶端進程以啟動所述客戶端進程,從所述操作平臺接收所述已啟動客戶端進程的句柄,生成第一監控線程并將其與句柄并入到所述已啟動客戶端進程中,并儲存所述第一監控線程在所述進程控制模塊中,用于監控客戶端進程的運行狀態,所述進程控制模塊產生退出通知事件以響應通過所述監控線程對已終止客戶端進程的檢測,所述進程控制模塊通過在客戶端進程中發信號給第二監控線程的進程間的通信對象,利用進程間的通信對象的句柄,終止所述客戶端進程;故障檢測和恢復模塊,其為一個或多個啟動的客戶端進程存儲定義的故障恢復計劃,所述故障檢測和恢復模塊具有進程狀態表,如果客戶端進程已經正常終止,則從所述進程控制模塊接收正常終止信號,并從已終止進程經由相對應于所述已終止客戶端進程的所述第一監控線程接收退出通知信號,所述退出通知信號表明客戶端進程終止,所述故障檢測和恢復模塊檢查以決定是否進程是正常終止,以響應從所述進程控制模塊接收的退出通知信號,所述檢查是檢查終止的客戶端進程是否有對應的正常終止數據在進程狀態表中,所述故障檢測和恢復模塊存儲至少一個定義計算機怎樣從客戶端進程故障恢復的故障恢復計劃,如果所述進程控制模塊確定客戶端進程是由于故障導致退出,則所述進程控制模塊執行故障恢復計劃;以及處理器,其連接到所述內存,并控制所述進程控制模塊和故障檢測模塊執行所述功能。
2、如權利要求1所述的計算機,其特征在于,所述內存進一步存儲一個事 件處理器,所述事件處理器從所述進程控制模塊接收退出通知信號,所述退出 通知信號表示客戶端進程已經終止,所述事件處理器將所述退出通知信號通知 所述故障檢測和恢復模塊,所述故障檢測和恢復模塊確定客戶端進程是否正常終止以響應來自所述進程控制模塊的對應的退出通知信號。
3、 如權利要求1所述的計算機,其特征在于,所述進程控制模塊含有一個 隊列,所述隊列存儲由所述進程控制模塊在規則允許下執行的開始和終止請求。
4、 如權利要求3所述的計算機,其特征在于,所述監控進程包含一個經配置以定義在計算機啟動時被執行的開始和終止請求的初始化進程,所述初始化 進程輸入所述經配置的開始和終止請求到所述隊列里以在計算機啟動時執行。
5、 如權利要求1所述的計算機,其特征在于,至少一個開始和終止請求輸 入到運行進程的隊列中。
6、 一種計算機,其特征在于,包括 處理器;以及 所述處理器連接的內存;為運行在所述計算機上的對應的客戶端進程,所述內存存儲一個含有監控 線程的監控進程,所述監控線程外部運行對應的客戶端進程,允許所述處理器 外部監控對應的客戶端進程。
7、 如權利要求6所述的計算機,其特征在于,所述監控進程包含一個開始 進程,所述開始進程使用來自操作平臺的句柄以響應運行在所述操作平臺的客 戶端進程的開始,并且創建監控線程,所述監控線程包括用于監控所述客戶端 進程的句柄。
8、 如權利要求7所述的計算機,其特征在于,所述開始進程包括一個或多 個規則,所述規則用于開始進程確定客戶端進程是否可被啟動,所述開始進程 啟動所述客戶端進程開始以響應確定基于對客戶端進程外部已定義的一個或多 個夫見則的客戶端進程可^皮啟動。
9、 如權利要求6所述的計算機,其特征在于,還包括 輸入單元;輸出單元;以及 接口單元;所述監控進程包括開始進程和/或終止進程,其均能被另一個由處理器執行 的運行進程觸發,使用者通過所述輸入單元和所述輸出單元,外部設備通過所 述接口單元,或者它們的結合,使用監控線程、 一個或多個對應客戶端進程的 句柄、在對應的客戶端進程內進程間通信對象的句柄,來控制所述客戶端進程。
10、 如權利要求6所述的計算機,其特征在于,所述內存存儲一個初始化 進程,所述初始化進程定義了一個或多個由處理器在計算機開啟時啟動的進程。
11、 如權利要求6所述的計算機,其特征在于,所述監控進程進一步包括一個故障檢測和恢復模塊,所述故障檢測和恢復模塊存儲了 一個定義從所述客 戶端進程的故障恢復的故障恢復計劃,所述處理器執行所述恢復計劃以在沒有 包含計算機使用者請求的情形下從所述客戶端進程的故障自動恢復。
12、 如權利要求11所述的計算機,其特征在于,所述故障檢測和恢復模塊 包括存儲正常終止標識數據的進程狀態表,所述正常終止標識數據是由監控進 程的終止進程所設置以表示客戶端進程正常終止。
13、 如權利要求11所述的計算機,其特征在于,所述監控進程進一步包括 一個事件處理器,在所述客戶端進程終止時,所述事件處理器從所述客戶端進 程的監控線程接收一個退出通知,并激活所述故障檢測和恢復模塊用以確定客 戶端進程是否正常終止或是由于故障而終止。
14、 一種計算機可讀介質,其特征在于,所述計算機可讀介質存儲一個計 算機進程,計算機執行所述計算機進程的步驟包括給客戶端進程創建一個外部監控線程用以啟動運行在計算機處理器上的所 述客戶端進程,所述創建的監控線程包括一個從操作平臺接收的句柄,所述句 柄被所述處理器用來監所述控客戶端進程的運行狀態。
15、 如權利要求14所述的計算機可讀介質,其特征在于,所述計算機執行 所述計算機進程的步驟進一步包括由處理器執行一個初始化進程以響應啟動,重新啟動進程,或者重新啟動 計算機,或者它們的結合,所述初始化進程執行啟動一個或多個由所述初始化 進程定義的客戶端進程,創建為每一各自由所述初始化進程定義的客戶端進程 執行的監控線程,以使每一個運行的客戶端進程具有對應的監控線程,所述處 理器使用所述監控線程監控每一個運行進程的狀態。
16、 如權利要求14所述的計算機可讀介質,其特征在于,所述計算機執行 所述計算機進程的步驟進一步包括接收請求以啟動客戶端進程,創建響應于接收的請求而執行的監控線程。
17、 如權利要求16所述的計算機可讀介質,其特征在于,所述計算機執行 所述計算機進程的步驟進一步包括響應接收請求,確定所述客戶端進程基于一個或多個外部定義的規則是否 被啟動,才丸行啟動以響應確定客戶端進程基于一個或多個失見則^皮啟動。
18、 如權利要求16所述的計算機可讀介質,其特征在于,所述請求從另一 個由所述處理器執行的進程接收。
19、 如權利要求16所述的計算機可讀介質,其特征在于,所述請求通過計 算機輸入單元從使用者接收。
20、 如權利要求16所述的計算機可讀介質,其特征在于,所述請求通過計 算機接口單元從外部設備接收。
21、 如權利要求14所述的計算機可讀介質,其特征在于,所述計算機執行 所述計算機進程的步驟進一步包括在所述操作平臺啟動所述客戶端進程后,從所述操作平臺接收句柄,接收 所述句柄在創建所述監控線程之前。
22、 一種計算機可讀介質,存儲一個計算機進程,計算機執行所述計算機 進程的步驟包括創建客戶端進程的內部監控線程以響應啟動運行在計算機處 理器上的客戶端進程,所述監控線程由來自監控進程的終止請求激活,作為在 為發信號給客戶端進程以終止執行的進程中的目標,所述監控進程傳送所述終 止請求給所述客戶端進程,使用所述進程的監控線程的進程間通信對象的句柄 使所述監控進程與所述客戶端進程通信。
23、 如權利要求22所述的計算機可讀介質,其特征在于,所述進程間通信 對象包括至少一個信號量,互斥,事件,或它們的結合。
24、 如權利要求22所述的計算機可讀介質,其特征在于,所述計算機執行 所述計算機進程的步驟進一步包括接收請求以在所述監控進程中終止所述客戶端進程;以及 通過發信號給所述進程中的進程間通信對象的句柄以響應接收請求,從所 述監控進程終止所述客戶端進程。
25、 如權利要求24所述的計算機可讀介質,其特征在于,還包括步驟 響應于接收所述請求,確定客戶端進程是否基于一個或多個外部定義客戶端進程的規則被終止,執行終止以響應確定進程基于一個或多個規則可被終止。
26、 如權利要求22所述的計算機可讀介質,其特征在于,所述請求從由所 述處理器執行的另 一個進程接收。
27、 如權利要求22所述的計算機可讀介質,其特征在于,所述請求通過計 算機輸入單元從使用者接收。
28、 如權利要求22所述的計算機可讀介質,其特征在于,所述請求通過計 算機接口單元從外部設備接收。
29、 一種計算機,其特征在于 處理器;以及連接到所述處理器的內存,所述內存存儲有故障檢測和恢復模塊,所述故 障和恢復模塊為由所述處理器執行的客戶端進程定義一個恢復計劃,所述故障 檢測和恢復模塊通過在沒有由計算機使用者請求的情況下執行所述恢復計劃, 自動檢測和恢復所述客戶端進程故障。
30、 如權利要求29所述的計算機,其特征在于,所述恢復計劃為所述客戶 端進程特定定義。
31、 如權利要求29所述的計算機,其特征在于,所述恢復計劃是默認的計 劃,用于在沒有為所述客戶端進程特定定義恢復計劃的事件中恢復所述客戶端 進程故障。
32、 如權利要求29所述的計算機,其特征在于,所述恢復計劃表示所述計 算才幾纟皮重tf啟動。
33、 如權利要求29所述的計算機,其特征在于,所述恢復計劃表示所述客 戶端進程:故重新啟動。
34、 如權利要求29所述的計算機,其特征在于,所述恢復計劃表示所述處 理器終止至少一個其他客戶端進程。
35、 如權利要求29所述的計算機,其特征在于,所述恢復計劃表示所述處 理器啟動至少一個其他客戶端進程。
36、 一種計算機可讀介質,其特征在于,所述計算機可讀介質存儲一個計 算機進程,所述計算機執行所述計算機進程的步驟包括所述客戶端進程外部^r測運行在所述計算^L處理器的客戶端進程故障;以及自動執行一個故障恢復計劃以恢復所述客戶端進程故障。
37、 如權利要求36所述的計算機可讀介質,其特征在于,所述4企測步驟進 一步包括通過終止客戶端進程的句柄的無效,發送信號給監控線程,所述監控線程 產生退出通知事件以響應所述句柄的無效;接收所述退出通知事件;在終止前,斗企查由所述客戶端進程設置的進程終止標識;以及 基于所述檢查,確定所述客戶端進程是否故障; 基于所述確定,執行所述故障恢復計劃。
38、 如權利要求36所述的計算機可讀介質,其特征在于,為客戶端進程定 義特定定義的所述故障恢復計劃。
39、 如權利要求36所述的計算機可讀介質,其特征在于,所述故障恢復計 劃是在沒有為客戶端進程特定定義的計劃時定義的默認計劃。
40、 如權利要求36所述的計算機可讀介質,其特征在于,所述故障恢復計 劃引導所述處理器重新啟動計算機。
41、 如權利要求36所述的計算機可讀介質,其特征在于,所述故障恢復計 劃引導處理器重新啟動發生故障的客戶端進程。
42、 如權利要求36所述的計算機可讀介質,其特征在于,所述故障恢復計 劃引導所述處理器啟動至少一個附加的進程。
43、 如權利要求36所述的計算機可讀介質,其特征在于,所述故障恢復計 劃51導所述處理器終止至少一個附加的進程。
全文摘要
監控進程在啟動計算機后執行一系列客戶端進程,開始,終止,監控運行于計算機上的進程,和/或自動檢測和恢復進程故障。當客戶端進程被啟動時,進程使用它創建的監控線程監控客戶端進程,并使用進程的句柄檢測進程終止。當檢測到進程終止,檢查監控進程內的狀態表以確定是否是客戶端進程故障或是正常終止。如果是由于故障導致終止,進程使用預先配置的計劃自動執行故障恢復。
文檔編號G06F11/07GK101268447SQ200680017717
公開日2008年9月17日 申請日期2006年5月19日 優先權日2005年5月26日
發明者朱蓮·約克·亞伯 申請人:美國聯合包裹服務公司