C++ 启动一个进程,而不是作为子进程
我需要启动一个进程并将其作为分离的进程运行。我有一些入门应用程序,其目的是运行另一个exe并立即退出。实现这一目标的最佳方式是什么 我阅读了几次文档,但仍然有问题。文档说明我需要在完成后调用C++ 启动一个进程,而不是作为子进程,c++,winapi,createprocess,C++,Winapi,Createprocess,我需要启动一个进程并将其作为分离的进程运行。我有一些入门应用程序,其目的是运行另一个exe并立即退出。实现这一目标的最佳方式是什么 我阅读了几次文档,但仍然有问题。文档说明我需要在完成后调用CloseHandle。但我的家长应用程序不应该等待孩子退出。文档的另一部分说我可以不处理句柄-当父进程终止时,系统将关闭它们。这是否意味着子应用程序在父应用程序之后立即退出?这似乎不是真的——我关闭了启动程序,但我的孩子进程仍然在运行 有一个分离的\u进程标志,它似乎就是我要找的。但文档说明了一些关于控制台
CloseHandle
。但我的家长应用程序不应该等待孩子退出。文档的另一部分说我可以不处理句柄-当父进程终止时,系统将关闭它们。这是否意味着子应用程序在父应用程序之后立即退出?这似乎不是真的——我关闭了启动程序,但我的孩子进程仍然在运行
有一个分离的\u进程
标志,它似乎就是我要找的。但文档说明了一些关于控制台的内容。什么控制台?我不在乎控制台
我读了好几遍CreateProcess文档,但仍然有问题。文档说明我需要在完成后调用CloseHandle。但我的家长应用程序不应该等待孩子退出
好吧,那就别等了。您可以在父级中立即调用CloseHandle
文档的另一部分说我可以不处理句柄-当父进程终止时,系统将关闭它们。这是否意味着子应用程序在父应用程序之后立即退出?这似乎不是真的——我关闭了启动程序,但我的孩子进程仍然在运行
不,没有。我不知道你是怎么从文件中得到的,但这不是它的意思
有一个分离的进程标志,这似乎是我要寻找的。但文档说明了一些关于控制台的内容。什么控制台?我不在乎控制台
如果你不在乎,那就别担心。声明
对于控制台进程,新进程不会继承其父进程的控制台(默认)
这意味着:如果您有一个控制台进程,并且启动了一个新进程,它将不会继承其父控制台
如果您没有控制台进程,就不必担心它
创建子进程,但不会等待子进程完成,因此您已全部设置完毕
如果您想等待子进程完成,您应该调用CreateProcess
,然后调用WaitForSingleObject
总结如下:
// Version 1) Launch and wait for a child process completion
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
if (CreateProcess(L"C:\\myapp.exe", L"", NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {
::WaitForSingleObject(processInfo.hProcess, INFINITE); // DO WAIT for the child to exit
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
// ----------------------------------------------------------------
// Version 2) Launch and do NOT wait for a child process completion
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
if (CreateProcess(L"C:\\myapp.exe", L"", NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {
CloseHandle(processInfo.hProcess); // Cleanup since you don't need this
CloseHandle(processInfo.hThread); // Cleanup since you don't need this
}
请注意,版本2不会终止您的子进程。只释放不再需要的资源。对进程句柄调用
CloseHandle
不会终止进程。它只是关闭进程对象的句柄。进程对象仍然存在,并将继续运行。因此,请调用CreateProcess
,然后终止启动程序进程。如果需要,请在两个句柄上调用CloseHandle
。或者没有,系统会帮你整理。哦,我以为关闭一个手柄意味着关闭一个应用。。。若starter退出,但child将写入其控制台(假设我们没有指定标志),该怎么办?我将gui应用程序作为子应用程序使用,因此无法进行检查。@nikitablacka win32应用程序不会使用控制台子系统。在那种情况下也没有问题。