当前位置:C++技术网 > 资讯 > 程序终止后如何获取退出码

程序终止后如何获取退出码

更新时间:2015-06-24 00:20:39浏览次数:1+次

    有时候,我们需要知道一个程序退出后,它的运行状况,它是正常退出还是异常退出。在有些时候,还有其他用途。比如,很多软件管理软件,里面可以搜索软件,然后安装,还可以卸载软件。它安装软件时就可以通过被安装的软件安装完的退出码来判断是否安装成功。
    下面就来说说如何实现。我们可以通过系统API函数GetExitCodeProcess函数来得到。该函数第一个参数就是进程的句柄,第二个参数就是DWORD指针,用来接收获取到的退出码的值。
    函数使用很简单,但是有些地方需要说明。这个函数始终都可以得到返回值,并不会返回真假这样的布尔值。如果要获取的进程退出码的进程还在运行,可想而知,这个返回值肯定是不对的,因为它还没有退出,何来退出码?系统此时还是返回一个值,不过这个值并不是退出码,而是0x103,宏定义为STILL_ACTIVE,表示进程还在运行。所以如果是这个值,就不要当做是退出码了。如果进程终止了,此时获得的就是退出码了。
    问题来了,那么怎么检测进程是否终止了呢?很直观的,你可能想到了就是通过返回码,不断的检测得知。不过这样效率就太低了。
    我们有一个更好的办法,就是借助系统的信号机制。WaitForSingleObject函数可以帮我们搞定。你可以将要检测的进程的句柄传递进去,如果进程没有终止,那么这个句柄就被占用着,此时,WaitForSingleObject就需要挂起等待。这个挂起并不会使CPU被占用,CPU还可以做其他事情,等系统检测到进程终止后,就会通知你。WaitForSingleObject函数就有阻塞状态继续往后执行,后面就可以直接获取进程的退出码了。WaitForSingleObject的具体说明,请参看本站其他文章,或者你也可以查看MSDN或者询问其他朋友。
    得到退出码后,你就可以做相应的判断了,实现你需要的功能了。