如何启动流程并使其"独立"

use*_*392 12 c++ winapi

假设我有两个正确的事实: -

CreateProcess()启动一个进程并让程序在运行时继续运行,但是当程序完成时,子进程会随之运行.此外,您的程序必须记下子进程退出的时间,以便它可以正确释放进程句柄.

system() 启动一个过程,等待它完成然后继续你的程序.

  • 我需要知道的是如何启动一个进程并让它独立于我的程序运行,并在程序退出后继续运行.我不需要捕获它的输出或对它有任何进一步的控制,我只是想让用户与它交互 - 比如说我想写一个替代开始菜单运行命令.

请问,实际上可以做到这一点吗?

Nul*_*teя 7

CreateProcess()不等待子进程默认完成,它立即返回.WaitForSingleObject如果你想等待,请使用.不,当父进程退出时子进程不会被自动终止,并且操作系统自动释放句柄,因此不需要自己执行(如果使用现代版本的Windows).

就像任何操作系统资源(gdi对象,用户对象,内核对象)一样,如果您不自行销毁/释放/关闭资源,那么在应用程序运行时您将遇到资源泄漏.您应该在返回后CreateProcess立即关闭返回的两个句柄CreateProcess.


Des*_*boy 5

您可以在 CreationFlags 中指定“DETACHED_PROCESS”,如以下代码片段所示:

if (CreateProcessW(NULL, (LPWSTR) L"File.exe ",
        0, 0, false,CREATE_DEFAULT_ERROR_MODE | CREATE_NO_WINDOW | DETACHED_PROCESS , 0, 0,
        &siStartupInfo, &piProcessInfo) != false)
    {
        /* Watch the process. */
        dwExitCode = WaitForSingleObject(piProcessInfo.hProcess, (2 * 1000));
    }
    else
    {

        /* CreateProcess failed */
        iReturnVal = GetLastError();
    }
Run Code Online (Sandbox Code Playgroud)

这将使您的流程独立。我希望这可以帮助你。