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