【发布时间】:2014-08-18 19:37:16
【问题描述】:
我无法从控制台应用程序成功启动多个进程。 我有一个带有控制台应用程序 A 的 Visual Studio 解决方案,它必须启动另一个控制台应用程序 (B) 的多个实例。
B 在循环中运行,在进程参数中指定的端口上捕获传入的网络流量。
为了简化问题,我删除了所有网络逻辑并使其尽可能基本,但我仍然遇到同样的问题。
A 的代码,其中 Test.exe 是控制台应用程序 B:
static void Main(string[] args)
{
try
{
for (int i = 0; i < 5; i++)
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo { FileName = "Test.exe" });
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
B 代码:
static void Main(string[] args)
{
int counter = 0;
while (Console.KeyAvailable == false || Console.ReadKey().Key != ConsoleKey.Escape)
{
Console.WriteLine("" + counter);
System.Threading.Thread.Sleep(1000);
counter++;
}
Console.ReadLine();
}
在 Visual Studio 调试中运行控制台应用程序 A 后,A 会按预期弹出,但 B 的一个窗口仅弹出一个窗口,开始按指定计数。但是,如果我查看我的任务管理器,我可以看到实际上有两个 Test.exe 正在运行,其中一个正在使用 116K 内存,另一个正在使用 180,000K 内存。
一旦计数器达到 15,它会关闭并打开两个新窗口,这两个窗口都从 0 开始计数。这种行为会继续,每次计数器达到 15 时都会打开 B 的新实例,直到 A 中指定的 5 个实例正在运行。
显然这种行为不是我想要的,我希望 A 立即启动 B 5 次(在此示例中),而无需等待进程退出。
【问题讨论】:
-
在 VS 之外运行 A 时是否得到相同的行为?
-
我刚测试,马上就得到了5个Test.exe实例。
-
如果我在 VS 之外运行 A,则行为不稳定,有时会启动 5,有时会启动 4。但是,10 秒后,它们都会关闭,并且会再次弹出一个新的 B 实例我可以在任务管理器中看到两个Test.exe进程,一个使用116K内存,另一个使用180,000K内存。
-
即使我删除了 A 中的循环并仅启动一个进程,我的任务管理器仍会说 B 的两个实例正在以上述内存使用情况运行。
-
程序A不应该等待任何东西,而是在启动B后继续执行