【问题标题】:Close parent process if child closed or crashed如果子进程关闭或崩溃,则关闭父进程
【发布时间】:2017-06-15 13:44:05
【问题描述】:

我有一个 Win32 程序。该程序使用 CreateProcess 函数创建一个进程来运行另一个程序。如果子进程因任何原因关闭或崩溃,我想关闭父进程。

我该怎么做?

【问题讨论】:

    标签: c++ windows winapi process


    【解决方案1】:

    您可以在已创建进程的句柄上使用WaitForSingleObject 函数,如下所示:

    STARTUPINFO si {sizeof(si)};
    PROCESS_INFORMATION pi {};
    
    CreateProcessW(/*your arguments here*/);
    
    WaitForSingleObject(pi.hProcess, INFINITE);
    

    请注意,如果您确实使用INFINITE 作为等待时间,则函数会阻塞,直到进程终止。如果您希望父进程同时执行其他操作,最好将该代码放在单独的线程中。

    如果您希望父进程成为所创建进程的完整包装器,请在完成获取子进程的退出代码后使用GetExitCodeProcess

    DWORD dwExit;
    GetExitCodeProcess(pi.hProcess, &dwExit);
    

    这段代码只是一个简单的例子。我在回答中提到的所有三个函数都可能失败,健壮的代码会检查它们的返回值并在失败的情况下采取相应的行动。

    【讨论】:

    • “如果您希望父进程同时做其他事情,最好将该代码放在单独的线程中。” - 这是 一种方法来做到这一点,但不一定是最好的。 MsgWaitForMultipleObjects 可能更合适。一方面,它不需要您与另一个线程同步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多