How to get a sub-process' return code

后端 未结 2 976
被撕碎了的回忆
被撕碎了的回忆 2021-02-19 07:29

What is the method of getting the return value from spawning a sub-process within windows? It looks like ShellExecute() is simpler to use than is CreateProce

2条回答
  •  不知归路
    2021-02-19 08:13

    To acquire the exit code of a process on Windows you can use GetExitCodeProcess().

    Example application that accepts the process id as an argument and waits for five seconds for it to complete and then acquires its exit code:

    int main(int a_argc, char** a_argv)
    {
        int pid = atoi(*(a_argv + 1));
    
        HANDLE h = OpenProcess(SYNCHRONIZE | PROCESS_QUERY_INFORMATION, FALSE, pid);
    
        if (NULL != h)
        {
            WaitForSingleObject(h, 5000); // Change to 'INFINITE' wait if req'd
            DWORD exit_code;
            if (FALSE == GetExitCodeProcess(h, &exit_code))
            {
                std::cerr << "GetExitCodeProcess() failure: " <<
                    GetLastError() << "\n";
            }
            else if (STILL_ACTIVE == exit_code)
            {
                std::cout << "Still running\n";
            }
            else
            {
                std::cout << "exit code=" << exit_code << "\n";
            }
            CloseHandle(h);
        }
        else
        {
            std::cerr << "OpenProcess() failure: " << GetLastError() << "\n";
        }
    
        return 0;
    }
    

提交回复
热议问题