假设我有两个正确的事实: -
CreateProcess()
启动一个进程,让程序在运行时继续运行,但是当程序完成时,子进程会随之崩溃。此外,您的程序必须记下子进程退出的时间,以便它可以正确释放进程句柄。
system()
启动一个过程,等待它完成然后继续你的程序。
请问,实际上可以这么做吗?
答案 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();
}
这将使您的流程独立。我希望这会对你有所帮助。