假设我有两个正确的事实: -
CreateProcess()启动一个进程并让程序在运行时继续运行,但是当程序完成时,子进程会随之运行.此外,您的程序必须记下子进程退出的时间,以便它可以正确释放进程句柄.
system() 启动一个过程,等待它完成然后继续你的程序.
请问,实际上可以做到这一点吗?
CreateProcess()不等待子进程默认完成,它立即返回.WaitForSingleObject如果你想等待,请使用.不,当父进程退出时子进程不会被自动终止,并且操作系统自动释放句柄,因此不需要自己执行(如果使用现代版本的Windows).
就像任何操作系统资源(gdi对象,用户对象,内核对象)一样,如果您不自行销毁/释放/关闭资源,那么在应用程序运行时您将遇到资源泄漏.您应该在返回后CreateProcess立即关闭返回的两个句柄CreateProcess.
您可以在 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)
这将使您的流程独立。我希望这可以帮助你。