首页 > 解决方案 > 是否可以让控制台等待另一个子进程?

问题描述

通常当从 Windows 控制台运行程序时,控制台会等待进程退出,然后打印提示并等待用户输入。但是,如果该进程启动了一个子进程,控制台仍然只会等待第一个进程退出。它也不会等待孩子。

程序有没有办法让控制台等待另一个子进程而不是(或以及)当前进程。

我认为这是不可能的,因为大概控制台正在等待进程的句柄,并且无法替换该句柄。但是,我正在努力寻找对此的任何确认。

标签: windowswinapiconsole-application

解决方案


程序有没有办法让控制台等待另一个子进程而不是(或以及)当前进程。

不,正如您所指出的,一旦控制台创建的第一个进程退出,控制台就会停止等待。它没有第一个进程创建任何子进程的概念。

所以,你可以做的是:

  • 只需让第一个进程等待它创建的任何子进程,然后再退出即可。

  • 如果这不是一个选项,则创建一个单独的帮助进程,该进程创建一个作业对象,然后启动主进程并将其分配给该作业。它创建的任何子进程也将自动被放入相同的作业中1。然后,辅助进程可以等待作业中的所有进程退出,然后再自行退出。然后,您可以让控制台运行并等待辅助进程而不是主进程。

    1:默认情况下 - 如果作业设置允许,进程生成器可以选择从当前作业中分离出一个新的子进程。


推荐阅读