会不会有下面这种这种情况存在,
进程A,在10:00中运行 ID 为128, 程序C在此时获得进程A的ID,并保存,   然后在10:15进程A自动退出.
进程B,在10:30中运行 ID 为也可能128.进程C在10:30后,依据在10:00中保存的进程ID判断进程A是否退出,结果正确吗?
问题:
已知进程ID,如何知道该进程是否已经退出?

解决方案 »

  1.   

    问题点:
    进程A和进程B有没有可能是同一个ID
      

  2.   

    可以跳过这个问题来考虑。
    你可以使用NtQueryInformationProcess来获取进程启动的时间,如果10:30后根据这个ID获得的进程启动时间仍然是10:00,那么当然可以认为这个进程就是原来的A进程。
    附:NtQueryInformationProcess的参考资料
    http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/NtQueryInformationProcess.html
      

  3.   

    你先调用OpenProcess函数打开这个进程句柄,如果失败,GetLastError查看,确定是进程已经退出,如果成功打开的话,你用GetModuleFileNameEx(6.0没有这个函数,需要从更高版本拿到头文件Psapi.h和库文件Psapi.lib才可以)来得到这个进程的路径名,来确定是否是A进程(在之前,可以用EnumProcessModuels)。
    当然你如果是10:00A进程开始,C进程为什么要只保存ID呢?你可以在10:00的时候就用OpenProcess打开这个进程,然后用WaitForSignleObject在一个线程中等待这个进程退出的时候通知C进程。或者,你用OpenProcess打开后保存这个句柄,在10:30的时候,用GetExitCodeProcess来判断进程A是不是已经结束,如果返回GetExitCodeProcess返回失败,或者返回的退出码不等于STILL_ACTIVE,就知道这个进程已经结束。