如何判断使用CreateProcess启动的进程是否仍在运行?

时间:2017-05-24 18:46:51

标签: c++ windows winapi

如果我通过CreateProcess()创建了一个流程,我该如何确定它是否仍在运行?我知道我需要使用pi.hProcess,但我不知道如何,谷歌并没有给我有意义的提示。

PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
bool got_it=CreateProcess(NULL, CA2T(launchString.c_str()), NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

2 个答案:

答案 0 :(得分:6)

您可以使用任何标准wait functions,例如WaitForSingleObject(),例如:

switch (WaitForSingleObject(pi.hProcess, 0))
{
    case WAIT_OBJECT_0:
        // process has terminated...
        break;

    case WAIT_TIMEOUT:
        // process is still running...
        break;
}

答案 1 :(得分:0)

您可以使用GetExitCodeProcess()检索流程的退出代码,如果流程仍在运行,则会提供特殊的STILL_ACTIVE值:

DWORD exit_code;
GetExitCodeProcess(pi.hProcess, &exit_code);
if (exit_code == STILL_ACTIVE) {

}