如何启动流程并使其“独立”

时间:2012-03-22 08:39:27

标签: c++ winapi

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

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

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

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

请问,实际上可以这么做吗?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

您可以指定" DETACHED_PROCESS#34;在CreationFlags中,如下面的代码片段:

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();
    }

这将使您的流程独立。我希望这会对你有所帮助。