http://topic.csdn.net/u/20080101/14/17ae9cbf-f64f-40bf-86d5-3ff268065711.html
GetExitCodeProcess
因?yàn)檫M(jìn)程句柄可能還在被別的進(jìn)程使用(比如創(chuàng)建該進(jìn)程的進(jìn)程,或者OpenProcess的進(jìn)程),雖然目標(biāo)進(jìn)程已經(jīng)退出,但是句柄引用計(jì)數(shù)不為0,因此進(jìn)程句柄的某些屬性還保留在系統(tǒng)中,其中包括句柄的狀態(tài)處于信號狀態(tài)、進(jìn)程的32位返回值繼續(xù)有效。只有當(dāng)句柄引用計(jì)數(shù)為0,所有這些跟句柄相關(guān)的屬性才會被清理。
GetExitCodePorcess需要進(jìn)程句柄作為參數(shù),如果沒有句柄怎么去調(diào)用?
這個句柄是之前獲取的,然后這個進(jìn)程退出了...
會不會是這樣,函數(shù)退出返回err,getlasterr,錯誤碼句柄無效?
只要有進(jìn)程獲取了目標(biāo)進(jìn)程句柄,它的引用計(jì)數(shù)就會加1,所以即使目標(biāo)進(jìn)程退出,它的進(jìn)程句柄還會繼續(xù)有效。你要理解引用計(jì)數(shù)的含義。
無論你是CreateProcess還是OpenProcess還是DuplicateHandle復(fù)制一個句柄,系統(tǒng)內(nèi)部都會增加引用計(jì)數(shù),必須依靠CloseHandle來減少引用計(jì)數(shù),只要引用計(jì)數(shù)不是0,句柄就會一直存在。所以你根本不必?fù)?dān)心進(jìn)程退出后句柄是否消失,只要你擁有這個句柄,句柄就一定不會消失,因?yàn)槟阍黾拥囊糜?jì)數(shù)必須要你自己來釋放,別人釋放不了。