最近现网有一个问题:我们的进程A起了一个定时器去检测另外一个进程B,当检测到进程B退出时,我们进程A也退出。
检测的机制是使用createToolhelp32Snapshot去获取当前进程快照,然后比较每一个进程名称是否与进程B的名称相同,如果找到相同的就返回进程ID,否则返回0.
问题是:起了我们的进程A,进程B就会经常性的闪退,很不可思议。使用processmonitor 检测进程B退出状态(exit status),发现进程B被杀时,exit status 为1;起了进程A时,B退出时的exit status 为0,由于不了解exit status含义,今晚特地拜读MSDN,结果如下:
1.在知道了进程的句柄时,可以通过GetExitCodeProcess来获取进程的退出码,有以下几个来源
a.ExitProcess 和 TerminateProcess 调用时的参数
b.main或者winmain函数的返回值(当函数从main函数返回时也会隐式的调用ExitProcess)
c.导致进程关闭的某个异常值(the value of the exception that caused the termination)
注意:
1.当某个线程在等待一个内核对象时,除非等到这个内核对象,否则不会响应被中断的请求
2.当一个进程被ExitProcess终止时,该进程所 加载的所有dll都会受到DLL_PROCESS_DETACH消息,而使用TerminateProcess 结束进程时不会通知其加载的dll