專利名稱::用于監(jiān)視正在計算機系統(tǒng)中執(zhí)行的應用內(nèi)的子進程的建立和解除的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明一般地涉及在執(zhí)行軟件應用期間跟蹤進程建立。更具體地,本發(fā)明涉及監(jiān)視正執(zhí)行的應用的子進程和孫進程的建立和解除。
背景技術(shù):
:圖1中示出常規(guī)計算機系統(tǒng)100,其具有若干硬件部件,包括諸如中央處理器(CPU)的處理器110、諸如RAM的存儲器和非易失性存儲媒體130,它們彼此通信。未示出的其它硬件部件包括磁盤機、網(wǎng)絡部件以及其它業(yè)內(nèi)人士周知的硬件部件。常規(guī)計算機系統(tǒng)100還包括可以利用這些硬件部件110、120、130存儲并執(zhí)行的軟件程序。具體地,計算機系統(tǒng)100中的軟件包括駐留在存儲媒體130中的應用150、存儲器120中存儲的操作系統(tǒng)160和可能存儲在存儲媒體130及存儲器120中的其它應用或程序。當計算機現(xiàn)用時,可在存儲器120中找到應用150。當關(guān)掉計算機時,可在存儲媒體130中找到操作系統(tǒng)160。這樣,如業(yè)內(nèi)人士應該了解的那樣,可在不同的位置存儲操作系統(tǒng)160。應用150和操作系統(tǒng)160彼此并且可能和系統(tǒng)100中的其它軟件交互,以便如用戶指定那樣向用戶提供數(shù)據(jù)存取以及控制系統(tǒng)100中的其它硬件和軟件。計算機系統(tǒng)100的用戶通過指示操作系統(tǒng)160執(zhí)行或“運行”應用150而執(zhí)行應用150。接著操作系統(tǒng)160利用存儲器120、處理器110以及可在計算機系統(tǒng)100中得到的其它設(shè)備執(zhí)行所需的應用150并且可能執(zhí)行與應用150交織的其它程序。操作系統(tǒng)160可以是業(yè)內(nèi)人士周知的任何常見操作系統(tǒng)。個人計算機中使用的流行常規(guī)操作系統(tǒng)包括諸如微軟公司的各種32位視窗(“Win32”)操作系統(tǒng)。它們包括微軟的視窗NT、視窗95和視窗98。其它可用作為操作系統(tǒng)160的其它常見操作系統(tǒng)包括供工作站使用的UNIX和供個人計算機使用的DOS。按照操作系統(tǒng),系統(tǒng)中運行的基于Win32的應用被稱為“進程”。每個進程至少包括單個由操作系統(tǒng)運行的執(zhí)行線程。線程是代碼的單元,其可從操作系統(tǒng)得到一些操作時間以便和其它代碼單元并發(fā)地運行,而且線程必須和某進程相關(guān)?;赪in32的應用可以利用視窗操作系統(tǒng)提供的各種技術(shù)來提高并發(fā)運行多個應用的能力。這些并發(fā)技術(shù)中的一種是“多線索化”,其中一個或多個進程的一部分或“多個線程”是獨立的并且可并發(fā)執(zhí)行。然而,并發(fā)地執(zhí)行二個獨立線程有時并不特別有效。在一個正執(zhí)行的應用或進程,即“父”進程,產(chǎn)生另一個“子”進程并且尤其在該子進程產(chǎn)生孫進程的情況中,出現(xiàn)這種低效率。當該父進程是一系列要執(zhí)行的進程或者應用中的一個時,可能產(chǎn)生問題。例如,可能在其子進程或?qū)O進程中一個或多個終止之前父進程已終止。盡管諸如視窗95的操作系統(tǒng)提供多線索技術(shù),如果在被終止父進程的子進程仍為現(xiàn)用的同時開始執(zhí)行某另一個應用,在一些計算機系統(tǒng)中可能造成破壞。圖2示出在一計算機系統(tǒng)例如圖1的系統(tǒng)100中存儲供執(zhí)行的一系列應用。該系列包括第一應用210、第二應用220和第三應用230,每個應用代表一級更大的用于安裝軟件程序的安裝進程。應用210、220、230可存儲在存儲介質(zhì)130或存儲器120中,如圖1中示出那樣。應用210、220、230的執(zhí)行是由存儲器120中存儲的操作系統(tǒng)240管理的。在圖2中,由于操作系統(tǒng)240的控制,按順序地執(zhí)行應用210、220、230。圖2是在已經(jīng)開始執(zhí)行第一應用210并且第一應用210已經(jīng)建立子進程250、260的時刻畫出的。此外,子進程260已經(jīng)產(chǎn)生它自己的子進程,即“孫”進程270、280。在圖2中,可能在終止子進程250、260或者孫進程270、280之前終止第一應用210的執(zhí)行。如果該安裝進程不等待子進程或?qū)O進程的執(zhí)行的終止,操作系統(tǒng)240可能啟動第二應用220,即下一級安裝的執(zhí)行。在第一應用210的一個或多個子進程或者孫進程仍在執(zhí)行的同時執(zhí)行第二應用或可能執(zhí)行另一個應用會在使用這些應用的計算機系統(tǒng)中造成破壞。在視窗95中,已公布的Win32API被認為是用于在終止某父應用的子進程之前延遲其它應用的執(zhí)行。但是,由于Win32API不跟蹤父應用的孫進程的建立,Win32API常常不能正確工作。從而,當只使用Win32API時,可能會在父進程的子進程尤其是孫進程終止之前開始執(zhí)行其它應用。概言之,現(xiàn)存技術(shù)不能在計算機系統(tǒng)中執(zhí)行應用期間可靠地跟蹤子進程和孫進程的建立和解除。技術(shù)內(nèi)容本發(fā)明一般地涉及監(jiān)視正在計算機系統(tǒng)中經(jīng)操作系統(tǒng)控制而執(zhí)行的應用內(nèi)的子進程和孫進程的建立和解除。子進程具有對應的子進程數(shù)據(jù)庫結(jié)構(gòu),而正執(zhí)行的應用具有對應的應用進程數(shù)據(jù)庫結(jié)構(gòu)。設(shè)置一個用于存儲和正執(zhí)行應用內(nèi)正執(zhí)行的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的表。依據(jù)本發(fā)明的一個方面,當在執(zhí)行應用期間建立新進程時,檢索和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu)。利用該新進程數(shù)據(jù)庫結(jié)構(gòu),檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu)。該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)比較。若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同,把該新進程識別為一個現(xiàn)存的子進程。若把該新進程識別為現(xiàn)存子進程,把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。依據(jù)本發(fā)明的另一個方面,監(jiān)視應用內(nèi)的子進程的建立和解除包括確定在執(zhí)行該應用期間中何時終止某進程。檢索和該終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu)。該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)比較,若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中的一個相同,把該終止進程識別為一個終止的子進程。若該終止進程被識別為終止的子進程,從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中去掉該終止進程數(shù)據(jù)庫結(jié)構(gòu)。依據(jù)另一個方面,本發(fā)明可位于駐留在操作系統(tǒng)和正執(zhí)行應用或進程之間的虛擬設(shè)備驅(qū)動程序中??梢栽谠撚嬎銠C系統(tǒng)中的存儲媒體中存儲該虛擬設(shè)備驅(qū)動程序。該VxD(虛擬設(shè)備驅(qū)動程序)和操作系統(tǒng)以及正執(zhí)行應用二者交互。依據(jù)本發(fā)明的再一個方面,周期地檢查該表以判定該表是否具有入口。若該表不具有入口,可安全地假定現(xiàn)存子進程以及,可能地,相關(guān)的孫進程已經(jīng)退出并且該應用的執(zhí)行已完成。接著可以在因并發(fā)地執(zhí)行一系列應用,例如在安裝某軟件程序期間,多個應用而產(chǎn)生破壞的最小風險下執(zhí)行該系列中的其它應用。本發(fā)明的這些以及其它方面和優(yōu)點會在下述連帶著附圖描述本發(fā)明的示范實施例的詳細說明中變?yōu)榍宄D1是常規(guī)計算機系統(tǒng)100的概括方塊圖;圖2是一個概括方塊圖,示出常規(guī)計算機系統(tǒng)100內(nèi)一系列軟件應用的執(zhí)行;圖3是依據(jù)本發(fā)明的一示范實施例的包含著用于監(jiān)視正執(zhí)行應用內(nèi)的子進程的建立和解除的設(shè)備和方法和計算機系統(tǒng)300的概括方塊圖;圖4是依據(jù)本發(fā)明的一示范實施例的監(jiān)視正執(zhí)行應用內(nèi)子進程的建立的虛擬設(shè)備驅(qū)動程序的概括方塊圖;圖5是依據(jù)本發(fā)明的一示范實施例的用來監(jiān)視正執(zhí)行應用內(nèi)子進程的建立的方法的流程圖;圖6是依據(jù)本發(fā)明的一示范實施例的監(jiān)視正執(zhí)行應用內(nèi)子進程的解除的虛擬設(shè)備驅(qū)動程序的概括方塊圖;以及圖7是依據(jù)本發(fā)明的一示范實施例的用來監(jiān)視正執(zhí)行應用內(nèi)子進程的解除的方法的流程圖。具體實施例方式在下述詳細說明中,將提供本發(fā)明的用來監(jiān)視正執(zhí)行應用內(nèi)子進程的建立和解除的設(shè)備和方法的各種實施例。本發(fā)明的一些實施例,尤其是本發(fā)明的一些示范方法,將代表一些具體應用,包括一種計算機系統(tǒng)和一種計算機可讀媒體。參照圖3-7詳細說明本發(fā)明的實施例。圖3是包含著依據(jù)本發(fā)明的一實施例的用于監(jiān)視正執(zhí)行應用內(nèi)子進程的建立和解除的一種設(shè)備和方法的計算機系統(tǒng)300的方塊圖。圖3的計算機系統(tǒng)300包括處理器330和存儲器325。處理器330可含有單個微處理器,或者含有用于把該計算機系統(tǒng)配置成多處理系統(tǒng)的多個微處理器。存儲器325存儲供處理器330執(zhí)行的指令和數(shù)據(jù)的一部分。如果全部地或者部分地用軟件(包括計算機程序)實現(xiàn)本發(fā)明的示范系統(tǒng),存儲器325在運行時存儲可執(zhí)行代碼。存儲器325可包括多組動態(tài)隨機存取存儲器(DRAM)以及高速緩沖存儲器。圖3的系統(tǒng)還包括海量存儲設(shè)備335、外圍部件(組)340、輸入部件(組)355、便攜式存儲媒體驅(qū)動器(組)360、圖形子系統(tǒng)370和顯示器385。為了簡明,圖3中示出的部件描述成通過單條總線380連接。然而,可以通過一個或多個數(shù)據(jù)傳輸裝置連接這些部件。例如,可以通過本地微處理器總線連接處理器330和存儲器325,并且可通過一條或多條輸入/輸出(I/O)總線連接海量存儲設(shè)備335、外圍設(shè)備(組)340、便攜式存儲媒體驅(qū)動器(組)360和圖形子系統(tǒng)370。典型地用磁盤機或光盤機實現(xiàn)的海量存儲設(shè)備335是非易失性存儲部件,用于存儲供處理器330使用的數(shù)據(jù)和指令。在另一實施例中,海量存儲設(shè)備存儲一個計算機程序,該程序被執(zhí)行時供裝入到存儲器325中以實現(xiàn)本發(fā)明的示范方法。也可以在處理器330中存儲本發(fā)明的示范方法。便攜式存儲媒體驅(qū)動器360和諸如軟盤、硬盤或光盤的便攜式非易失性存儲媒體一起運行,并且可以包括一種或多種機器可讀媒體例如半導體存儲器(如EEPROM)或者其它計算機可讀媒體,用于對和從圖3的計算機系統(tǒng)輸入和輸出數(shù)據(jù)以及代碼。在一實施例中,在這樣的便攜式媒體上存儲本發(fā)明的示范方法并且通過該便攜式存儲媒體驅(qū)動器360輸入到該計算機系統(tǒng)300。外圍設(shè)備(組)340可包括任何類型的計算機支持設(shè)備,例如輸入/輸出(I/O)接口,以便對計算機系統(tǒng)300增加其它功能。例如,外圍設(shè)備(組)340可包括一個網(wǎng)絡接口卡,用于使計算機系統(tǒng)300和網(wǎng)絡、調(diào)制解調(diào)器等交互。輸入設(shè)備(組)355提供用戶接口的一部分。輸入設(shè)備(組)355可包括用于輸入字母數(shù)字以及其它鍵信息的字母數(shù)字鍵盤,或者包括指點設(shè)備,例如鼠標、跟蹤球、操縱桿或光標方向鍵組。這樣的設(shè)備提供用來和依據(jù)本發(fā)明的示范實施例的方法交互的輔助手段。為了顯示文本和圖形信息,圖3的計算機系統(tǒng)300包含圖形子系統(tǒng)370和顯示器385。顯示器385可包括陰極射線管(CRT)顯示器,液晶顯示器(LCD)、其它適用的顯示器設(shè)備,或者其它用于顯示以便使用戶能觀看子進程的狀態(tài)例如子進程在正執(zhí)行應用內(nèi)的建立和解除的裝置。圖形子系統(tǒng)370接收文本和圖形信息并處理這些信息以供輸出到顯示器385。顯示器385可用于顯示對象、部件接口和/或顯示其它作為用戶接口的一部分的信息。圖3的系統(tǒng)300還包括聲頻系統(tǒng)350。在一實施例中,聲頻系統(tǒng)350包括一個聲卡,該聲卡從外圍設(shè)備340中的麥克風接收聲頻信號。此外,圖3的系統(tǒng)包括輸出設(shè)備345。適用的輸出設(shè)備的例子包括揚聲器、打印機等等。圖3的計算機系統(tǒng)中含有的設(shè)備是通用計算機系統(tǒng)中的典型設(shè)備,并且用來代表業(yè)內(nèi)人士周知的大范圍的這種計算機設(shè)備。圖3的系統(tǒng)示出一種實踐上可用來實現(xiàn)依據(jù)本發(fā)明的各種示范實施例的方法的平臺。大量其它平臺也是足以滿足的,例如可從蘋果計算機公司購到的基于Macintosh平臺、網(wǎng)絡平臺、多處理器平臺、其它個人計算機、工作站、主機、導航系統(tǒng)等等。計算機系統(tǒng)300還可包括一個用于監(jiān)視的不同的顯示裝置,例如CRT顯示器、LCD顯示器、投影顯示器等。類似地,任何類型的存儲器可充當存儲器325。除了部件接口之外,還可以使用其它接口裝置,包括字母數(shù)字鍵盤、其它鍵信息或任何指點設(shè)備,諸如鼠標、跟蹤球、操縱桿、光標或方向鍵。圖3的計算機系統(tǒng)300還包括一個設(shè)備驅(qū)動程序,其中可存儲依據(jù)本發(fā)明建立的示范虛擬設(shè)備驅(qū)動程序(“VxD”)。一些操作系統(tǒng),例如視窗95,提供使用虛擬設(shè)備驅(qū)動程序,后者通常用于改進軟件性能。虛擬設(shè)備驅(qū)動程序典型地是一個32位保護方式驅(qū)動程序,它管理諸如硬件設(shè)備或已安裝軟件的系統(tǒng)資源,從而多于一個的應用可同時使用資源。“VxD”中的“x”代表設(shè)備驅(qū)動程序的類型。例如,用于顯示設(shè)備的虛擬設(shè)備驅(qū)動程序稱為VDD,用于計時設(shè)備的虛擬設(shè)備驅(qū)動程序是VTD,用于打印設(shè)備的虛擬設(shè)備驅(qū)動程序是VPD,并依此類推。VxD支持用于典型計算機的硬件設(shè)備,包括盤控制器、串行和并行端口、鍵盤和顯示設(shè)備,等等,如果多個應用之間的切換會破壞硬件設(shè)備的狀態(tài),該設(shè)備通常具有對應的虛擬設(shè)備和VxD。該VxD典型地為每個應用跟蹤設(shè)備的狀態(tài)并且確保只要某應用繼續(xù)該設(shè)備處于正確狀態(tài)。盡管大多數(shù)虛擬設(shè)備管理硬件,一些虛擬設(shè)備只管理已安裝應用,例如MS_DOS設(shè)備驅(qū)動程序。這樣的虛擬設(shè)備含有仿真該軟件的代碼或者確保該軟件只使用對該目前運行的應用提供的數(shù)據(jù)。在圖3中,VxD可存儲在存儲器325、海量存儲器335或便攜式存儲媒體360中。虛擬設(shè)備驅(qū)動程序代表一種依據(jù)本發(fā)明的示范方法(后面更詳細解釋)并且可以和例如視窗95的操作系統(tǒng)一起使用以便監(jiān)視應用執(zhí)行期間子進程的建立和解除。圖4示出依據(jù)本發(fā)明的一個示范虛擬設(shè)備驅(qū)動程序400。VxD400配置成判定新進程425是否是正執(zhí)行應用410的現(xiàn)存子進程465。從而,VxD400和正執(zhí)行應用410以及操作系統(tǒng)405通信,其中操作系統(tǒng)405存儲在圖3的計算機系統(tǒng)300的海量存儲設(shè)備335或存儲器325中。操作系統(tǒng)405控制應用410的執(zhí)行。在圖4中,正執(zhí)行應用410示成是現(xiàn)存子進程445和450的父進程。正執(zhí)行應用410可由操作系統(tǒng)405直接控制,或者,它可以是在操作系統(tǒng)405控制下正執(zhí)行的一個或多個父進程建立的子進程或?qū)O進程。從而,例如,如果正執(zhí)行應用410是另一個父進程(未示出)的子進程,現(xiàn)存子進程445和450應是該父進程的孫進程。這樣,VxD400配置成監(jiān)視子進程和孫進程二者的建立和解除。在圖4中,應用410具有對應的用來標識具體應用410的應用數(shù)據(jù)庫結(jié)構(gòu)(“APDB”)412。APDB412包括若干進程標識符,這些標識符分別標識應用410、應用410的任何子進程以及應用410的任何孫進程。例如,下述代碼代表視窗95或視窗NT操作系統(tǒng)中使用的一個示例APDB<prelisting-type="program-listing"> typedefstructPDB DWORDType; DWORDcReference; DWORDunl; DWORDpSomeEvent; DWORDTerminationStatus; DWORDun2; DWORDDefaultHeap; DWORDMemoryContext; DWORDflags; DWORDpPSP; WORDPSPSelector; WORDMTEIndex; WORDcThreads; WORDcNotTermThreads; WORDun3; WORDcRingOThreads; DWORDHeapHandle; DWORDW16TDB; DWORDMemMapFiles; PENVIRONMENTDBpEDB; DWORDpHandleTable; structPDB*ParentPDB; DWORDMODREFList; DWORDThreadList; DWORDDebuggeeCB;<!--SIPO<DPn="8">--><dpn="d8"/> DWORDLocalHeapFreeHead; DWORDInitialRingOID; DWORDcrst[41; DWORDun4[3] DWORDpConsole; DWORDtlsInUseBits1; DWORDtlsInUseBits2; DWORDProcessDWORD; structPDB*ProcessGrou DWORDpExeMODREF; DWORDTopExcFilter; DWORDBasePrilrity; DWORDHeapOwnList; DWORDHeapHandleBlockLis DWORDpSomeHeapPtr; DWORDpConsoleProvider; WORDEnvironSelector; WORDErrorMode; DWORDpevtLoadFinished; WORDUTState; }PDB,*PPDB;</pre>在圖4中,操作系統(tǒng)405包括一個控制計算機系統(tǒng)300中新進程的建立的系統(tǒng)進程建立子例程415。系統(tǒng)進程建立子例程415在應用410的執(zhí)行期間建立具有對應的新進程數(shù)據(jù)庫結(jié)構(gòu)(“NPDB”)430的新進程425。新進程數(shù)據(jù)庫結(jié)構(gòu)430可以包括一些進程標識符,它們分別標識新進程425和新進程425的父進程。在圖4中,一旦建立新進程425,系統(tǒng)進程建立子例程415在線路435上輸出一個信號。在操作系統(tǒng)405為視窗95的一個例子中,該信號是Create_Thread信號或Thread_Init信號。在圖4中,操作系統(tǒng)405還包括一個取得現(xiàn)行進程子例程420。在該操作系統(tǒng)405為視窗95的例子中,子例程420是視窗95操作系統(tǒng)提供的VWIN32_GetCurrentProcessHandle子例程。當由調(diào)用方475調(diào)用時,取得現(xiàn)行進程子例程420在線路440上把新進程數(shù)據(jù)庫結(jié)構(gòu)430轉(zhuǎn)發(fā)給VxD400。在圖4中,已經(jīng)開始執(zhí)行應用410并且已經(jīng)產(chǎn)生包括著子進程445和子進程450的子進程。這些進程445和450被當成是“現(xiàn)存的”,因為它們尚未終止,反之則被標識為正執(zhí)行應用410的終止子進程?,F(xiàn)存子進程445和450分別具有對應的現(xiàn)存子進程數(shù)據(jù)庫(“EPDB”),在圖4中用EPDB0和EPDB1表示。每個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)最好包括標識它自己、它的父進程以及它的祖父進程或應用(若有的話)的各個進程標識符。在圖4中,設(shè)置一個表455,用于存儲和該正執(zhí)行應用內(nèi)現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)。如圖4中所示,已經(jīng)利用后面會更詳細說明的方法把和現(xiàn)行子進程445和450對應的EPDB0和EPDB1按序地添加到表455中。取決于所需實現(xiàn),可以用軟件或者硬件實現(xiàn)表455。例如,在圖3中,可以利用計算機系統(tǒng)300中的緩沖器實現(xiàn)表455,并且保持在存儲器425或者海量存儲器335中。圖4中示出表455至少具有四個條目(條目0到條目3),并且可按該程序的具體應用的需要具有任何數(shù)量的條目。在圖4中,設(shè)置一個指針460以用于標識表455中的一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)果,最好是最最近添加到該表中的EPDB。在圖4,EPDB1是在EPDB0的后面添加到表455中的,從而指針460指向EPDB1。指針460最好用一個計數(shù)器體現(xiàn),其可以用計算機系統(tǒng)300的硬件或者軟件實現(xiàn)。指針460是可移動的以指向表455中各條目中的任一條目,如后面更詳細說明那樣。在圖4中,VxD配置成監(jiān)視新進程425的建立和判定能否在框465中把新進程425分類為正執(zhí)行應用410的一個現(xiàn)存子進程。為此,VxD400包括執(zhí)行在圖5的流程圖中描述的各特定操作的各個部分。在圖4和5中,在步驟510中開始應用410的執(zhí)行,VxD400包括一個判定部分470,其在步驟520判定何時建立新進程425。如圖4中所示,判定部分470和系統(tǒng)進程建立子例程415通信,以便在線路435上接收指示已經(jīng)建立新進程425的信號。從而,在該操作系統(tǒng)405為視窗95的例子中,當建立新進程425時VxD400的判定部分470在線路435上接收CreateThread信號或者ThreadInit信號。如業(yè)內(nèi)人士理解的那樣,可以向判定部分470傳送其它各種報文和信號,以便告訴VxD400線程的建立。在圖5中,在步驟520中判定已經(jīng)建立新進程425后,在步驟530中,VxD400調(diào)用“取得現(xiàn)行進程”子例程420以便在線路440上得到和新進程425對應的新進程數(shù)據(jù)庫結(jié)構(gòu)430。如圖4中所示,操作530是由在線路上和取得現(xiàn)行進程子例程420通信的調(diào)用部分475實現(xiàn)的。在該操作系統(tǒng)405為視窗95的例子中,調(diào)用部分475調(diào)用子例程VWIN32_GetCurrentProcessHandle來得到和新進程425對應的現(xiàn)行進程句柄或數(shù)據(jù)庫結(jié)構(gòu),即NPDB430。在圖4和5中,當調(diào)用取得現(xiàn)行進程子例程420時,在步驟530中把NPDB430傳送到調(diào)用部分475。在NPDB430內(nèi),含有標識新進程425的父進程的父進程標識符。這樣,VxD400可以利用該父進程標識符檢索新進程425的父進程的父進程數(shù)據(jù)庫結(jié)構(gòu)(PPDB)。例如,在一實施例中,和NPDB430一起傳送一個指針,然后VxD400可利用該指針從操作系統(tǒng)405檢索該PPDB。如圖4和5中所示,虛擬設(shè)備驅(qū)動程序400還包括一個和調(diào)用部分以及正執(zhí)行應用410通信的比較部分480。比較部分480從調(diào)用部分475接收該PPDB,并且接著在步驟540中比較該PPDB和與應用410對應的APDB412。這樣,VxD400確定線程425是否是正執(zhí)行應用410的子進程。若正在執(zhí)行多于一個的應用,該PPDB和各個應用的應用數(shù)據(jù)庫結(jié)構(gòu)比較。在圖5的步驟550中,若比較部分480判定在與新進程425的父進程對應的PPDB和APDB412之間不存在相同,則VxD識別新進程425不是正執(zhí)行應用410的子進程,并且VxD不注意新進程425,然后流程返回到步驟520。另一方面,如果在步驟550中PPDB和APDB匹配,該流程進入步驟560。在步驟560中,VxD400的標識部分485在框465中把新進程425標識為現(xiàn)存子進程。接著把該正面識別告訴VxD400的加法器部分490。在圖4和5中,步驟560后在步驟570,加法器部分490從判定部分470檢索NPDB430并且把NPDB430加到現(xiàn)存子進程數(shù)據(jù)庫表455的條目“2”中。在把NPDB430加到表455后,移動指針以指向條目“2”中的NPDB430。在該利用計數(shù)器維持指針460的例子中,該計數(shù)器遞增“1”。然后圖5的方法從步驟570返回到520以便確定在執(zhí)行應用410中何時建立下個新進程。如圖6和7中示出那樣,依據(jù)本發(fā)明的各實施例的示范虛擬設(shè)備驅(qū)動程序也能臨視正執(zhí)行應用內(nèi)的線程的解除。示范性虛擬設(shè)備驅(qū)動程序600具有和VxD400相類似的各個部分,并且還包括下面詳細說明的配置成監(jiān)視正執(zhí)行應用410內(nèi)子進程和孫進程的解除的各個部分。在圖6中,圖3的計算機系統(tǒng)300的海量存儲設(shè)備335或存儲器325中存儲的操作系統(tǒng)605共有圖4中的操作系統(tǒng)405的特性。例如,操作系統(tǒng)605類似地控制應用410的執(zhí)行并且包括取得現(xiàn)行進程子例程420。此外,操作系統(tǒng)605包括一個系統(tǒng)進程終止子例程610,子例程610在計算機系統(tǒng)300中正執(zhí)行應用410的同時控制進程的終止。圖6中,系統(tǒng)進程終止子例程610在應用410的執(zhí)行中終止具有對應的終止進程數(shù)據(jù)庫結(jié)構(gòu)(“TPDB”)620的進程615。TPDB620最好包括和圖4的NPDB430相類似的進程標識符組。一旦終止進程615,系統(tǒng)進程終止子例程610在線路625上輸出一個信號。在操作系統(tǒng)605為視窗95的一個例子中,該信號是Terminate_Thread信號。利用視窗95,系統(tǒng)進程終止子例程610還可以向線路625輸出其它指示解決線程的報文信號,其中包括Thread_Not_Executable報文信號和Destroy_Thread報文信號。如業(yè)內(nèi)人士應了解那樣,可以對線路625輸出各種其它類似的報文信號以通知VxD600某線程的解除。在圖6中,已經(jīng)開始執(zhí)行應用410,并且已經(jīng)產(chǎn)生現(xiàn)存子進程630、635和640。現(xiàn)存子進程630-640各具有對應的EPDB,即EPDB0、EPDB1和EPDB2,如圖6中所示。利用上面根據(jù)圖4和5說明的方法,已經(jīng)把EPDB0-2加到表455中。在圖6中,VxD600不僅配置成類似于圖4的VxD400在應用410的執(zhí)行中監(jiān)視子進程的建立,還配置成監(jiān)視進程615的終止并確定終止進程615是否是現(xiàn)存子進程630-640中的任一個。為了實現(xiàn)這種監(jiān)視,VxD400包括實現(xiàn)圖7的流程圖700所描述的一些特定操作的若干部件。在圖6和7中,在步驟710開始應用410的執(zhí)行。VxD600包括一個在步驟720中確定何時終止進程615的判定部分645。判定部分645和系統(tǒng)進程終止子例程610通信,以便從線路625接收指示進程615已終止的信號。在操作系統(tǒng)405為視窗的該例子中,判定部分645對線路625監(jiān)視Terminate_Thread報文信號或Thread_Not_Executable報文信號或Destroy_Thread報文信號。通過對線路625監(jiān)視這些信號中的任一個,VxD600得知何時終止某線程,例如進程615。在圖7中,在步驟720中確定進程615已終止后,VxD600在步驟730中利用調(diào)用部分655調(diào)用“取得現(xiàn)行進程”子例程420,以便在線路650上得到和終止進程615對應的終止進程數(shù)據(jù)庫結(jié)構(gòu)620。在操作系統(tǒng)605為視窗95的該例中,調(diào)用部分655調(diào)用子例程VWIN32_GetCurrentProcessHandle來得到作為和終止進程615對應的現(xiàn)行進程句柄或數(shù)據(jù)庫結(jié)構(gòu)的TPDB620。如圖6和7中所示,虛擬設(shè)備驅(qū)動程序600還包括一個和調(diào)用部分655通信接收TPDB620的并接著在步驟740中把TPDB620和表455中存儲的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)EPDB0_2比較的比較部分660。在圖6和7的步驟750中,若比較部分660判定TPDB620和表455中存儲的任何現(xiàn)存進程數(shù)據(jù)庫結(jié)構(gòu)EPDB0_2之間不存在匹配,VxD600識別終止進程615不是現(xiàn)存子進程630-640中的一個,然后該流程返回到步驟720。在步驟760中,若比較部分660判定TPDB620和表455中存儲的EPDB0-2中的任一個相同,標識部分把終止進程615標識為終止子進程。例如,在圖6中,比較部分660確定TPDB620和表455中存儲的EPDB2相同,從而標識部分670把終止進程615標識為一個終止的子進程,即子進程640。在圖6和7中,流程從步驟760進入步驟770中,在步驟770中位于VxD600內(nèi)的刪除部分675從現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)EPDB0-2的表455中刪除TPDB620。即,在圖6中因為EPDB2和TPDB620匹配,從表455中刪除EPDB2。在其它的例子中,當表455中存儲的一個或多個其它EPDB和TPDB620匹配時,還從表455刪除這樣的EPDB。在從表455刪除EPDB后,移動指針以指向剩余中的最最近添加到表455中的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)。這樣,在圖2中,在從表455刪除EPDB之后,向回接一個條目移動指針460以指向條目“1”即EPDB1。在另一個例子中,在從該表中刪除EPDB0的情況下,把EPDB1移動到條目“0”,EPDB2移動到條目“1”,并且把指針向回移動一個條目以指向條目“1”中的EPDB2。若指針460是用一個計數(shù)器實現(xiàn)的,則該計數(shù)器遞減“1”或者,在其它例子中,遞減從表455刪除的條目數(shù)量。接著圖7的方法從步驟770返回到步驟720以判定執(zhí)行應用410中何時解除另一個進程。依據(jù)本發(fā)明的各示范實施例,若正在執(zhí)行的應用產(chǎn)生子進程,向被監(jiān)視進程表455添加和該子進程對應的子進程數(shù)據(jù)庫結(jié)構(gòu)。當該子進程終止時,從表455刪除該子進程數(shù)據(jù)庫結(jié)構(gòu)。這樣,本發(fā)明的各實施例還在計算機系統(tǒng)中對一系列的應用或者進程的執(zhí)行提供控制。例如,一個軟件程序的安裝進程通常包括執(zhí)行其中包含的一系列的安裝應用。為了避免計算機系統(tǒng)中的破壞,常常要求按順序地執(zhí)行這些安裝應用,從而不并發(fā)地執(zhí)行二個安裝應用。當執(zhí)行一系列應用中的一個應用時,示例VxD,例如VxD400或者600,周期地判定表455是否具有任何條目。這樣,如果表455不含有現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu),該VxD識別出現(xiàn)存子進程并且可能相關(guān)的孫進程已經(jīng)退出而且完成該應用的執(zhí)行。從而,該VxD可接著信令操作系統(tǒng)按順序執(zhí)行下一個應用,例如安裝進程中的下個步驟。在別的示范實施例中,啟動被監(jiān)視應用的執(zhí)行的操作系統(tǒng)或者程序調(diào)用VxD以判定該表是否空。在用計數(shù)器實現(xiàn)表455的例子中,VxD判定該計數(shù)器是否為零。操作系統(tǒng)可能以這種方式周期性地調(diào)用VxD,例如每5秒等。若該計數(shù)器不等于零,接著按希望繼續(xù)周期性調(diào)用。反之,則可安全假定已經(jīng)終止被監(jiān)視應用以及其子女,并可執(zhí)行或者安裝該系列中的下個程序。應理解上面說明的具體實施例僅僅解說本發(fā)明的原理,而且業(yè)內(nèi)人士可以作出各種修改并不背離本發(fā)明的范圍和精神。從而,本發(fā)明的范圍僅由后面的權(quán)利要求書的范圍限定。權(quán)利要求1.一種用于監(jiān)視正在計算機系統(tǒng)中執(zhí)行的并由操作系統(tǒng)控制的應用內(nèi)子進程的建立和解除的方法,其中每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),該方法包括提供一個用來存儲和該正執(zhí)行應用內(nèi)的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的表;判定該應用執(zhí)行中何時建立新進程;檢索和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu);利用該新進程數(shù)據(jù)庫結(jié)構(gòu)檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu);若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同,把該新進程標識為一個現(xiàn)存子進程;以及若把該新進程標識為現(xiàn)存子進程,把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。2.權(quán)利要求1的方法,還包括判定該應用執(zhí)行中何時終止一進程;檢索和該終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu);比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu);若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中的一個相同,把該終止進程標識為一個終止子進程,以及若把該終止進程標識為終止子進程,從該現(xiàn)存在進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。3.權(quán)利要求1的方法,其中在該計算機系統(tǒng)的一個緩沖器中保持該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表,該方法還包括提供一個指向該表中的一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的指針;以及在對該表增添該新進程數(shù)據(jù)庫結(jié)構(gòu)后,移動該指針指向該新進程數(shù)據(jù)庫結(jié)構(gòu)。4.權(quán)利要求2的方法,其中在該計算機系統(tǒng)的一個緩沖器中保持該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表,該方法還包括提供一個指向該表中的一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的指針;在對該表增添該新進程數(shù)據(jù)庫結(jié)構(gòu)后,移動該指針指向該新進程數(shù)據(jù)庫結(jié)構(gòu);以及在從該表刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)后,移動該指針以指向現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中最最近添加到該表中的一個。5.權(quán)利要求4的方法,其中在該計算機系統(tǒng)中的一個計數(shù)器里保持該指針,并且其中移動指針指向新進程數(shù)據(jù)庫結(jié)構(gòu)包括遞增該計數(shù)器;以及移動指針指向最最近添加到該表中的現(xiàn)存子進程包括遞減該計數(shù)器。6.權(quán)利要求2的方法,其中該正執(zhí)行應用是該計算機系統(tǒng)內(nèi)存儲的供執(zhí)行的一系列應用中的一個,該方法還包括周期性地判定該表是否包含任何子進程數(shù)據(jù)庫結(jié)構(gòu);以及若該表不包含現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu),執(zhí)行該應用系列中的下個應用。7.權(quán)利要求5的方法,其中該正執(zhí)行應用是計算機系統(tǒng)內(nèi)存儲的供執(zhí)行的一系列應用中的一個,該方法還包括周期性地判定該計數(shù)器的值是否為零;以及若該計數(shù)器的值為零,執(zhí)行該應用系列中的下個應用。8.權(quán)利要求6的方法,其中該應用系列至少是一安裝程序的一部分。9.權(quán)利要求1的方法,其中該操作系統(tǒng)是具有用來建立該新進程的并且隨后提供CreateThread信號的系統(tǒng)進程建立子例程的視窗操作系統(tǒng),該操作系統(tǒng)還具有GetCurrentProcessHandle子例程以便提供該新進程數(shù)據(jù)庫結(jié)構(gòu)。10.權(quán)利要求9的方法,其中判定何時建立新進程包括接收CreateThread信號。11.權(quán)利要求9的方法,其中檢索新進程數(shù)據(jù)庫結(jié)構(gòu)包括調(diào)用Get_Current_Process_Handle子例程。12.權(quán)利要求9的方法,其中檢索父進程數(shù)據(jù)庫結(jié)構(gòu)包括利用一個新進程數(shù)據(jù)庫結(jié)構(gòu)中的用來標識父進程數(shù)據(jù)庫結(jié)構(gòu)的指針。13.權(quán)利要求2的方法,其中該操作系統(tǒng)是視窗操作系統(tǒng),其具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程,一個用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程和一個用于提供終止進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程。14.權(quán)利要求13的方法,其中判定何時終止進程包括接收Terminate_Thread信號。15.權(quán)利要求13的方法,其中檢索終止進程數(shù)據(jù)庫結(jié)構(gòu)包括調(diào)用Get_Current_Process_Handle子例程。16.一種用于監(jiān)視正在計算機中執(zhí)行的并由視窗操作系統(tǒng)控制的應用內(nèi)子進程的建立和解除的方法,其中每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),視窗操作系統(tǒng)具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程,該操作系統(tǒng)還具有一個調(diào)用時提供和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程,該方法包括提供一個用來存儲和該正執(zhí)行應用內(nèi)的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的表;一旦接收Create_Thread信號判定已經(jīng)建立新進程;在判定已建立新進程后,調(diào)用Get_Current_Process_Handle子例程以便檢索新進程數(shù)據(jù)庫結(jié)構(gòu);利用該新進程數(shù)據(jù)庫結(jié)構(gòu)中的一個指針確定和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu);若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同,把該新進程標識為一個現(xiàn)存子進程;以及若把該新進程標識為現(xiàn)存子進程,把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。17.權(quán)利要求16的方法,其中,該操作系統(tǒng)還具有用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程,當被調(diào)用時Get_Current_Process_Handle子例程還提供和終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu),該方法還包括一旦接收Terminate_Thread信號,判定該進程已結(jié)束;在判定該進程已結(jié)束后,調(diào)用Get_Current_Process_Handle子例程以檢索終止進程數(shù)據(jù)庫結(jié)構(gòu);比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu),若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中的一個相同,把該終止進程標識為一個終止子進程;以及若把該終止進程標識為終止子進程,從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。18.一種位于計算機系統(tǒng)的存儲媒體中的用于監(jiān)視正在該計算機系統(tǒng)執(zhí)行的并由操作系統(tǒng)控制的應用內(nèi)的子進程的建立和解除的虛擬設(shè)備驅(qū)動程序,其中,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),并設(shè)置一個用于存儲和該正執(zhí)行應用的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表,該虛擬設(shè)備驅(qū)動程序包括一個判定在該應用的執(zhí)行中何時建立新進程的判定部分;一個調(diào)用部分,其(i)檢索和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu),并且(ii)利用該新進程數(shù)據(jù)庫結(jié)構(gòu)檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);一個比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)的比較部分;一個標識部分,若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同,其把該新進程標識為一個現(xiàn)存子進程;以及一個添加部分,若該新進程被標識為現(xiàn)存子進程,它把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。19.權(quán)利要求18的虛擬設(shè)備驅(qū)動程序還包括一個判定該應用執(zhí)行中何時終止進程的判定部分;一個檢索和該終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu)的調(diào)用部分;一個比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的比較部分;一個標識部分,若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)相同,它把該終止進程標識為一個終止子進程,以及一個刪除部分,若該終止進程被標識為終止子進程,它從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。20.權(quán)利要求18的虛擬設(shè)備驅(qū)動程序,其中該操作系統(tǒng)是具有一個用于建立該新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程的視窗操作系統(tǒng),該操作系統(tǒng)還具有一個用于提供該新進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程。21.權(quán)利要求20的虛擬設(shè)備驅(qū)動程序,其中該判定部分和該系統(tǒng)進程建立子例程通信并且通過接收Create_Thread信號判定何時建立新進程。22.權(quán)利要求20的虛擬設(shè)備驅(qū)動程序,其中該調(diào)用部分和該Get_Current_Process_Handle子例程通信并且通過調(diào)用該Get_Current_Process_Handle子例程檢索該新進程數(shù)據(jù)庫結(jié)構(gòu)。23.權(quán)利要求19的虛擬設(shè)備驅(qū)動程序,其中該操作系統(tǒng)是一個具有一個用建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程、一個用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程和一個用于提供終止進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程的視窗操作系統(tǒng)。24.權(quán)利要求23的虛擬設(shè)備驅(qū)動程序,其中該判定部分和該系統(tǒng)進程終止子例程通信并且通過接收Terminate_Thread信號判定何時終止進程。25.權(quán)利要求23的虛擬設(shè)備驅(qū)動程序,其中該調(diào)用部分和該Get_Current_Process_Handle子例程通信并通過調(diào)用該Get_Current_Process_Handle子例程檢索該終止進程數(shù)據(jù)庫結(jié)構(gòu)。26.一種位于計算機系統(tǒng)的存儲媒體中的用于監(jiān)視正在該計算機系統(tǒng)中執(zhí)行的并由視窗操作系統(tǒng)控制的應用內(nèi)子進程的建立和解除的虛擬設(shè)備驅(qū)動程序,其中,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),該視窗操作系統(tǒng)具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程,該操作系統(tǒng)具有一個調(diào)用時提供和該進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程,并設(shè)置一個用于存儲和該執(zhí)行應用內(nèi)現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表,該虛擬設(shè)備驅(qū)動程序包括一個和該系統(tǒng)進程建立子例程通信的判定部分,它一旦接收Create_Thread信號判定已建立新進程;一個調(diào)用部分,其(i)調(diào)用該Get_Current_Process_Handle子例程以便檢索新進程數(shù)據(jù)庫結(jié)構(gòu),以及(ii)利用該新進程數(shù)據(jù)庫結(jié)構(gòu)中的一個指針檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);一個比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)的比較部分;一個標識部分,若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同,其把該新進程標識為一個現(xiàn)存子進程,以及一個添加部分,若該新進程被標識為現(xiàn)存子進程,它把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。27.權(quán)利要求26的虛擬設(shè)備驅(qū)動程序,其中該操作系統(tǒng)還包括一個用于終止進程并出隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程,該Get_Current_Process_Handle子例程在調(diào)用時還提供和該終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu),該虛擬設(shè)備驅(qū)動程序還包括一個判定部分,它一旦接收Terminate_Thread信號判定已終止進程;一個調(diào)用Get_Current_Process_Handle子例程檢索終止進程數(shù)據(jù)庫結(jié)構(gòu)的調(diào)用部分;一個比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的比較部分;一個標識部分,若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)相同,它把該終止進程標識為一個終止子進程;以及一個刪除部分,若該終止進程被標識為終止子進程,它從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。28.一種在其中包含處理器可讀代碼的處理器可讀的存儲媒體,該處理器可讀代碼用于編程處理器以實現(xiàn)一種用于監(jiān)視正在計算機系統(tǒng)中執(zhí)行的并由操作系統(tǒng)控制的應用內(nèi)子進程的建立和解除的方法,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),該方法包括提供一個用來存儲和該正執(zhí)行應用內(nèi)的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表;判定該應用執(zhí)行中何時建立新進程;檢索和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu);利用該新進程數(shù)據(jù)庫結(jié)構(gòu)檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu);若該父該程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同,將該新進程標識為一個現(xiàn)存子進程,以及若把該新進程標識為現(xiàn)存子進程,把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。29.權(quán)利要求28的處理器可讀的存儲媒體,該方法還包括判定該應用執(zhí)行中何時終止一進程;檢索和該終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu);比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu);若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中的一個相同,把該終止進程標識為一個終止子進程;以及若把該終止進程標識為終止子進程,從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。30.權(quán)利要求28的處理器可讀的存儲媒體,其中在該計算機系統(tǒng)的一個緩沖器中保持該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表,該方法還包括設(shè)置一個指向該表中一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的指針;以及在對該表增添該新進程數(shù)據(jù)庫結(jié)構(gòu)后,移動該指針指向該新進程數(shù)據(jù)庫結(jié)構(gòu)。31.權(quán)利要求28的處理器可讀的存儲媒體,其中在該計算機系統(tǒng)的一個緩沖器中保持該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表,該方法還包括設(shè)置一個指向該表中的一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的指針;在對該表增添該新進程數(shù)據(jù)庫結(jié)構(gòu)后,移動該指針指向該新進程數(shù)據(jù)庫結(jié)構(gòu);以及在從該表刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)后,移動該指針以指向現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中最最近添加到該表中的一個。32.權(quán)利要求28的處理器可讀的存儲媒體,其中在該計算機系統(tǒng)中的一個計數(shù)器里保持該指針,并且其中移動指針指向新進程數(shù)據(jù)庫結(jié)構(gòu)包括遞增該計數(shù)器;以及移動指針指向最最近添加到該表中的現(xiàn)存子進程包括遞減該計數(shù)器。33.權(quán)利要求28的處理器可讀的存儲媒體,其中該正執(zhí)行應用是該計算機系統(tǒng)存儲的供執(zhí)行的一系列應用中一個,該方法還包括周期性地判定該表是否包含任何子進程數(shù)據(jù)庫結(jié)構(gòu);以及若該表不包含現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu),執(zhí)行該應用系列中的下個應用。34.權(quán)利要求28的處理器可讀的存儲媒體,其中該正執(zhí)行應用是該計算機系統(tǒng)內(nèi)存儲的供執(zhí)行的一系列應用中的一個,該方法還包括周期性地判定該計數(shù)器的值是否為零;以及若該計數(shù)器的值為零,執(zhí)行該應用系列中的下個應用。35.權(quán)利要求34的處理器可讀的存儲媒體,其中該應用系列至少是一安裝程序的一部分。36.權(quán)利要求28的處理器可讀的存儲媒體,其中該操作系統(tǒng)是具有用來建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程的視窗操作系統(tǒng),該操作系統(tǒng)還具有用于提供新進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程。37.權(quán)利要求28的處理器可讀的存儲媒體,其中判定何時建立新進程包括接收Create_Thread信號。38.權(quán)利要求28的處理器可讀的存儲媒體,其中檢索新進程數(shù)據(jù)庫結(jié)構(gòu)包括調(diào)用Get_Current_Process_Handle子例程。39.權(quán)利要求28的處理器可讀的存儲媒體,其中檢索父進程數(shù)據(jù)庫結(jié)構(gòu)包括利用一個新進程數(shù)據(jù)庫結(jié)構(gòu)中的用來標識父進程數(shù)據(jù)庫結(jié)構(gòu)的指針。40.權(quán)利要求30的處理器可讀的存儲媒體,其中該操作系統(tǒng)是視窗操作系統(tǒng),其具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程,一個用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程,和一個用于提供終止進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程。41.權(quán)利要求40的處理器可讀的存儲媒體,其中判定何時終止進程包括接收Terminate_Thread信號。42.權(quán)利要求40的處理器可讀的存儲媒體,其中檢索終止進程數(shù)據(jù)庫結(jié)構(gòu)包括調(diào)用Get_Current_Process_Handle子例程。43.一種在其中包含處理器可讀代碼的處理器可讀的存儲媒體,該處理器可讀代碼用于編程處理器以實現(xiàn)一種用于監(jiān)視正在計算機系統(tǒng)中執(zhí)行的并由視窗操作系統(tǒng)控制的應用內(nèi)的子進程的建立和解除的方法,其中,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),視窗操作系統(tǒng)具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程,該操作系統(tǒng)還具有一個調(diào)用時提供和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程,該方法包括提供一個用來存儲和該正執(zhí)行應用內(nèi)的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的表;一旦接收Create_Thread信號判定已經(jīng)建立新進程;在判定已建立新進程后,調(diào)用Get_Current_Process_Handle子例程以便檢索新進程數(shù)據(jù)庫結(jié)構(gòu);利用該新進程數(shù)據(jù)庫結(jié)構(gòu)中的一個指針確定和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu);若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同,把該新進程標識為一個現(xiàn)存子進程;以及若把該新進程標識為現(xiàn)存子進程,把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。44.權(quán)利要求43的處理器可讀的存儲媒體,其中,該操作系統(tǒng)還具有用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程,當被調(diào)用時Get_Current_Process_Handle子例程還提供和終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu),該方法還包括一旦接收Terminate_Thread信號,判定該進程已結(jié)束;在判定該進程已結(jié)束后,調(diào)用Get_Current_Process_Handle子例程以檢索終止進程數(shù)據(jù)庫結(jié)構(gòu);比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu),若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中的一個相同,把該終止進程標識為一個終止子進程;以及若把該終止進程標識為終止子進程,從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)結(jié)構(gòu)。45.一種位于計算機系統(tǒng)的存儲媒體中的用于監(jiān)視正在該計算機系統(tǒng)中執(zhí)行的并由操作系統(tǒng)控制的應用內(nèi)的子進程的建立和解除的虛擬設(shè)備驅(qū)動程序,其中,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),并設(shè)置一個用于存儲和該正執(zhí)行應用內(nèi)現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表,該虛擬設(shè)備驅(qū)動程序包括判定裝置,用于判定在該應用的執(zhí)行中何時建立新進程;調(diào)用裝置,用于(i)檢索和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu),并且(ii)利用該新進程數(shù)據(jù)庫結(jié)構(gòu)檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu),比較裝置,用于比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu);標識裝置,用于若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同把該新進程標識為一個現(xiàn)存子進程;以及添加裝置,用于若該新進程被標識為現(xiàn)存子進程把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。46.權(quán)利要求45的虛擬設(shè)備驅(qū)動程序還包括判定裝置,用于判定該應用執(zhí)行中何時終止進程;調(diào)用裝置,用于檢索和該終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu);比較裝置,用于比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu);標識裝置,用于若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)相同把該終止進程標識為一個終止子進程;以及刪除部分,用于若該終止進程被標識為終止子進程從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。47.權(quán)利要求45的虛擬設(shè)備驅(qū)動程序,其中該操作系統(tǒng)是具有一個用于建立該新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程的視窗操作系統(tǒng),該操作系統(tǒng)還具有一個用于提供該新進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程。48.權(quán)利要求47的虛擬設(shè)備驅(qū)動程序,其中該判定裝置和該系統(tǒng)進程建立子例程通信并且通過接收Create_Thread信號判定何時建立新進程。49.權(quán)利要求47的虛擬設(shè)備驅(qū)動程序,其中該調(diào)用裝置和該Get_Current_Process_Handle子例程通信并且通過調(diào)用該Get_Current_Process_Handle子例程檢索該新進程數(shù)據(jù)庫結(jié)構(gòu)。50.權(quán)利要求46的虛擬設(shè)備驅(qū)動程序,其中該操作系統(tǒng)是一個具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程、一個用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程和一個用于提供終止進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程的視窗操作系統(tǒng)。51.權(quán)利要求50的虛擬設(shè)備驅(qū)動程序,其中該判定裝置和該系統(tǒng)進程終止子例程通信并且通過接收Terminate_Thread信號判定何時終止進程。52.權(quán)利要求50的虛擬設(shè)備驅(qū)動程序,其中該調(diào)用裝置和該Get_Current_Process_Handle子例程通信并通過調(diào)用該Get_Current_Process_Handle子例程檢索該終止進程數(shù)據(jù)庫結(jié)構(gòu)。53.一種位于計算機系統(tǒng)的存儲媒體中的用于監(jiān)視正在該計算機系統(tǒng)中執(zhí)行的并由視窗操作系統(tǒng)控制的應用內(nèi)子進程的建立和解除的虛擬設(shè)備驅(qū)動程序,其中,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),該視窗操作系統(tǒng)具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程,該操作系統(tǒng)具有一個調(diào)用時提供和該新進程對應的新進程數(shù)據(jù)結(jié)構(gòu)的Get_Current_Process_Handle子例程,并設(shè)置一個用于存儲和該執(zhí)行應用內(nèi)現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表,該虛擬設(shè)備驅(qū)動程序包括一個和該系統(tǒng)進程建立子例程通信的判定裝置,用于一旦接收Create_Thread信號判定已建立新進程;調(diào)用裝置,用于(i)調(diào)用該Get_Current_Process_Handle子例程以便檢索新進程數(shù)據(jù)庫結(jié)構(gòu),以及(ii)利用該新進程數(shù)據(jù)庫結(jié)構(gòu)中的一個指針檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);比較裝置,用于比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu);標識裝置,用于若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同把該新進程標識為一個現(xiàn)存子進程;以及添加裝置,用于若該新進程被標識為現(xiàn)存子進程把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。54.權(quán)利要求53的虛擬設(shè)備驅(qū)動程序,其中該操作系統(tǒng)還包括一個用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程,該Get_Current_Process_Handle子例程在調(diào)用時還提供和該終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu),該虛擬設(shè)備驅(qū)動程序還包括判定裝置,用于一旦接收Terminate_Thread信號判定已終止進程;調(diào)用裝置,用于調(diào)用Get_Current_Process_Handle子例程以便檢索終止進程數(shù)據(jù)庫結(jié)構(gòu);比較裝置,用于比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu);標識裝置,用于若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)相同把該終止進程標識為一個終止子進程;以及刪除裝置,用于若該終止進程被標識為終止子進程從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。55.一種用監(jiān)視正在計算機系統(tǒng)中執(zhí)行的并由操作系統(tǒng)控制的第一應用內(nèi)子進程的建立和解除的方法,其中,在該計算機系統(tǒng)的存儲媒體中存儲供執(zhí)行的第二應用,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),該方法包括設(shè)置一個用來存儲和該正執(zhí)行應用內(nèi)的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表;判定該表是否包含任何現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu);以及若該表不包含現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)執(zhí)行第二應用。56.一種其中存儲著供執(zhí)行的并由操作系統(tǒng)控制的應用的計算機系統(tǒng),在該計算機系統(tǒng)中設(shè)置一個用來存儲和該正執(zhí)行應用內(nèi)的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的表,該系統(tǒng)包括一個處理器;一個存儲媒體;一個位于該存儲媒體中的用于監(jiān)視該應用在該計算機系統(tǒng)里執(zhí)行中時子進程的建立和解除的虛擬設(shè)備驅(qū)動程序,其中,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),該虛擬設(shè)備驅(qū)動程序包括一個判定該應用執(zhí)行中何時建立新進程的判定部分;一個調(diào)用部分,其(i)檢索和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu),以及(ii)利用該新進程數(shù)據(jù)庫結(jié)構(gòu)檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);一個比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)的比較部分;一個標識部分,若該父進程數(shù)據(jù)庫進程和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同它把該新進程標識為一個現(xiàn)存子進程;以及一個添加部分,若新進程被標識為現(xiàn)存子進程它把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中。57.權(quán)利要求56的計算機機系統(tǒng),其中該虛擬設(shè)備驅(qū)動程序還包括一個判定該應用執(zhí)行中何時終止進程的判定部分;一個檢索和終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu)的調(diào)用部分;一個比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的比較部分;一個標識部分,若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)相同,它把該終止進程標識為一個終止子進程;以及一個刪除部分,若該終止進程被標識為終止子進程,它從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。58.權(quán)利要求56的計算機系統(tǒng),其中該操作系統(tǒng)是具有一個用來建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程的視窗操作系統(tǒng),該操作系統(tǒng)還具有一個用于提供該新進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程。59.權(quán)利要求58的計算機系統(tǒng),其中該虛擬設(shè)備驅(qū)動程序的判定部分和該系統(tǒng)進程建立子例程通信并通過接收Create_Thread信號判定何時建立新進程。60.權(quán)利要求58的計算機系統(tǒng),其中該虛擬設(shè)備驅(qū)動程序的調(diào)用部分和該Get_Current_Process_Handle子例程通信并通過調(diào)用該Get_Current_Process_Handle子例程檢索該新進程數(shù)據(jù)庫結(jié)構(gòu)。61.權(quán)利要求57的計算機系統(tǒng),其中該操作系統(tǒng)是視窗操作系統(tǒng),其具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程,一個用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程和一個用于提供終止進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程。62.權(quán)利要求61的計算機系統(tǒng),其中該虛擬設(shè)備驅(qū)動程序的判定部分和該系統(tǒng)進程終止子例程通信并通過接收Terminate_Thread信號判定何時終止進程。63.權(quán)利要求61的計算機系統(tǒng),其中該虛擬設(shè)備驅(qū)動程序的調(diào)用部分和該Get_Current_Process_Handle子例程通信并通過調(diào)用該Get_Current_Process_Handle子例程檢索該終止進程數(shù)據(jù)庫結(jié)構(gòu)。64.一種其中存儲著供執(zhí)行的并由視窗操作系統(tǒng)控制的應用的計算機系統(tǒng),該視窗操作系統(tǒng)具有一個用于建立新進程并隨后提供Create_Thread信號的系統(tǒng)進程建立子例程,該操作系統(tǒng)還具有一個調(diào)用時提供和該新進程對應的新進程數(shù)據(jù)庫結(jié)構(gòu)的Get_Current_Process_Handle子例程,在該計算機系統(tǒng)中設(shè)置一個用來存儲和該正執(zhí)行應用內(nèi)的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的表,該系統(tǒng)包括一個處理器;一個存儲媒體;一個位于該存儲媒體中的用于監(jiān)視該應用在該計算機系統(tǒng)里執(zhí)行中時子進程的建立和解除的虛擬設(shè)備驅(qū)動程序,其中,每個子進程具有一個對應的子進程數(shù)據(jù)庫結(jié)構(gòu),該正執(zhí)行應用具有一個對應的應用進程數(shù)據(jù)庫結(jié)構(gòu),該虛擬設(shè)備驅(qū)動程序包括一個和該系統(tǒng)進程建立子例程通信的判定部分,一旦接收Create_Thread信號它判定已建立新進程;一個調(diào)用部分,其(i)調(diào)用該Get_Current_Process_Handle子例程以便檢索該新進程數(shù)據(jù)庫結(jié)構(gòu),以及(ii)利用該新進程數(shù)據(jù)庫結(jié)構(gòu)中的一個指針檢索和該新進程的父進程對應的父進程數(shù)據(jù)庫結(jié)構(gòu);一個比較該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)的比較部分;一個標識部分,若該父進程數(shù)據(jù)庫結(jié)構(gòu)和該應用進程數(shù)據(jù)庫結(jié)構(gòu)相同,其把該新進程標識為一個現(xiàn)存子進程,以及一個添加部分,若該新進程被標識為現(xiàn)存子進程,它把該新進程數(shù)據(jù)庫結(jié)構(gòu)添加到該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中。65.權(quán)利要求64的計算機系統(tǒng),其中,該操作系統(tǒng)還包括一個用于終止進程并隨后提供Terminate_Thread信號的系統(tǒng)進程終止子例程,該Get_Current_Process_Handle子例程在調(diào)用時還提供和該終止進程對應的終止進程數(shù)據(jù)庫結(jié)構(gòu),該虛擬設(shè)備驅(qū)動程序還包括一個判定部分,它一旦接收Terminate_Thread信號判定已終止進程;一個調(diào)用Get_Current_Process_Handle子例程檢索終止進程數(shù)據(jù)庫結(jié)構(gòu)的調(diào)用部分;一個比較該終止進程數(shù)據(jù)庫結(jié)構(gòu)和該表中的各現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的比較部分;一個標識部分,若該終止進程數(shù)據(jù)庫結(jié)構(gòu)和一個現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)相同,它把該終止進程標識為一個終止子進程;以及一個刪除部分,若該終止進程被標識為終止子進程,它從該現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)表中刪除該終止進程數(shù)據(jù)庫結(jié)構(gòu)。全文摘要一種用于監(jiān)視正在計算機系統(tǒng)中執(zhí)行的由操作系統(tǒng),例如視窗操作系統(tǒng)控制的應用內(nèi)子進程(450,445,465)或者線程的建立或解除的方法和虛擬設(shè)備驅(qū)動程序。提供一個用于存儲和該正執(zhí)行應用(410)內(nèi)的現(xiàn)存的子進程對應的現(xiàn)存子進程數(shù)據(jù)庫結(jié)構(gòu)的表(455)。周期性地檢查該表。若檢查時該表不具有條目,可安全地假定現(xiàn)存子進程以及可能的相關(guān)子系進程已經(jīng)退出并且已完成該應用的執(zhí)行。接著可以執(zhí)行一系列應用中的其它應用,例如在一軟件程序的安裝期間,并且使因并發(fā)地執(zhí)行該系列中的應用造成破壞的風險為最小。文檔編號G06F9/46GK1353831SQ00808157公開日2002年6月12日申請日期2000年5月24日優(yōu)先權(quán)日1999年5月27日發(fā)明者F·J·德克爾申請人:計算機聯(lián)合思想公司