进程结束后,为什么还能获取它的退出码?[

进程结束后,为什么还能获取它的退出码?[

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,句柄就会一直存在。所以你根本不必担心进程退出后句柄是否消失,只要你拥有这个句柄,句柄就一定不会消失,因为你增加的引用计数必须要你自己来释放,别人释放不了。

你可能感兴趣的:(进程结束后,为什么还能获取它的退出码?[)