c++ - 检查进程 ID 时使用 WaitForSingleObject 的好处

标签 c++ winapi pid

与不使用相比,在这里使用 WaitForSingleObject 有什么好处?第一个代码块来自 previous answer .第二个障碍是我是如何做的。

BOOL IsProcessRunning(DWORD pid)
{
    HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid);
    DWORD ret = WaitForSingleObject(process, 0);
    CloseHandle(process);
    return (ret == WAIT_TIMEOUT);
}

对比

BOOL IsProcessRunning(DWORD pid)
{
   HANDLE process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
   const bool exists = (process != NULL);
   CloseHandle(process);
   return exists;
}

好像用的是SYNCHRONIZE需要更高的权限,我只想检查当前用户的 PID。

最佳答案

当一个进程完成时,它会停止运行,但它不会消失,直到它的最后一个句柄被关闭。第一个解决方案区分这两种状态(仍在运行或已完成运行)。当然,答案在返回时可能已经过时。

如果您不需要这种区别,那么您的方法就可以了(尽管我会将该函数命名为类似 DoesProcessExist 的名称)。

关于c++ - 检查进程 ID 时使用 WaitForSingleObject 的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12900036/

相关文章:

c++ - 如何在不使用键或同时关闭的情况下更新 cv::namedWindow

windows - 在 VB6 中使用 Windows 复制器移动文件夹

matlab - 使用MATLAB Engine时如何获取matlab的PID?

c++ - 什么会导致我的 C++ win32 应用程序在后台运行?

c++ - 当用户将 ListView 项目拖到其滚动条上时,执行默认滚动行为

linux - 使用 bsub 提交给 LSF 的命令的 PID

linux - 确保只有一个 Bash 脚本实例正在运行的最佳方法是什么?

c++ - 如何在过滤驱动中读取当前进程的PE头

C++ 模板特化 : change return type of operator()?

c++ - 托管 C++ 查找和替换语法