在这里使用WaitForSingleObject
而不是使用它有什么好处?第一个代码块来自previous answer。第二个块就是我这样做的。
BOOL IsProcessRunning(DWORD pid)
{
HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid);
DWORD ret = WaitForSingleObject(process, 0);
CloseHandle(process);
return (ret == WAIT_TIMEOUT);
}
VS
BOOL IsProcessRunning(DWORD pid)
{
HANDLE process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
const bool exists = (process != NULL);
CloseHandle(process);
return exists;
}
似乎使用SYNCHRONIZE需要更高的权限,我只想检查当前用户的PID。
答案 0 :(得分:9)
当一个进程完成时,它会停止运行,但在它的最后一个句柄关闭之前它不会消失。第一个解决方案区分这两种状态(仍在运行或已完成运行)。当然,答案可能在它返回时已经过时。
如果您不需要这种区别,那么您的方法很好(尽管我会将该函数命名为DoesProcessExist)。
答案 1 :(得分:1)
IsProcessRunning的实现也可以使用GetExitCodeProcess Win32 API。
答案 2 :(得分:-1)
WaitForSingleObject将一直等到进程完成/退出。只有这样它才会回归。