开始一个过程,而不是作为一个孩子
Start a process not as a child
我需要启动一个进程并将其作为分离的进程运行。我有某种入门应用程序,其目的是运行另一个exe并立即退出。实现这一目标的最佳方法是什么?
我多次阅读CreateProcess
文档,但仍然有疑问。文档说我需要在完成后致电CloseHandle
。但是我的父应用程序不应该等待孩子退出。文档的另一部分说我可以不理会句柄 - 当父进程终止时,系统将关闭它们。这是否意味着子应用程序在父应用程序之后立即退出?这似乎不是真的 - 我关闭了一个启动器,但我的子进程仍在运行。
有一个DETACHED_PROCESS
标志似乎是我正在寻找的。但是文档说明了控制台。什么控制台?我不在乎控制台。
DETACHED_PROCESS标志文档状态
对于控制台进程,新进程不会继承其父进程的控制台(默认值)
这意味着:如果您有一个控制台进程并启动一个新进程,它将不会继承其父进程的控制台。
如果您没有控制台进程,则不必担心。
CreateProcess 会创建一个子进程,但不等待子进程完成,因此您已经全部设置好了。
如果要等待子进程完成,则应先调用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 不会终止子进程。只会释放不再需要的资源。
我多次阅读了CreateProcess文档,但仍然有疑问。文档说我需要在完成后调用 CloseHandle。但是我的父应用程序不应该等待孩子退出。
好吧,那就不要等待了。您可以立即在家长中呼叫CloseHandle
。
文档的另一部分说我可以不理会句柄 - 当父进程终止时,系统将关闭它们。这是否意味着子应用程序在父应用程序之后立即退出?这似乎不是真的 - 我关闭了一个启动器,但我的子进程仍在运行。
不,它没有。我不确定您是如何从文档中得到的,但这不是它的意思。
有一个DETACHED_PROCESS标志似乎是我正在寻找的。但是文档说明了控制台。什么控制台?我不在乎控制台。
如果你不在乎,那就不用担心了。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我可以制作一个基于孩子具有不同回报的虚函数吗?
- 添加一个孩子(引擎统一)
- 我怎样才能得到一个QObject的孩子?
- 从二进制搜索树中删除只有一个孩子的节点
- 开始一个过程,而不是作为一个孩子
- MPI,通过其中一个过程生成一个孩子
- 继承.如何做一个孩子=父母
- 投给一个孩子
- 孩子在等待另一个孩子