为啥关闭另一进程后,仍然能检测到句柄
为什么关闭另一进程后,仍然能检测到句柄?程序用于A进程 关闭 B进程,如下代码中,vProcessID 是B进程的PID,
为什么关闭另一进程后,仍然能检测到句柄?
程序用于A进程 关闭 B进程,如下代码中,vProcessID 是B进程的PID,关闭B进程后,openprocess的返回值AHandle始终不为0,请问是什么原因,该如何通过vProcessID 来检测进程已经被关闭了?
repeat
AHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, vProcessID);
if AHandle<>0 then
begin
GetExitCodeProcess(AHandle,exitcode);
terminateprocess(AHandle,exitcode);
end;
until AHandle=0;
[解决办法]枚举所有进程检查
[解决办法]在调用TerminateProcess的情况下,因为由你指定进程退出码,所以两种方法都一样准确。
但是如果是进程自己结束自己,那么通过快照枚举所有PID更准确。因为它的退出码如果恰好指定为STILL_ACTIVE(比如ExitProcess(STILL_ACTIVE)),那么GetExitCodeProcess就不能正确判断了。。。
另外7楼的代码不够严谨,改成这样: