最近我一直在使用C#开发一个应用程序,我正在使用Mono在Linux上运行它,我专门在Debian 6上进行测试。
2-8小时后,应用程序不断显示警告,即CreateProcess:错误创建进程句柄。此警告之前已发布在多个单声道邮件列表中,包括mono-devel和mono-bugs,mono-devel列表中的一个特定帖子为http://mono.1490590.n4.nabble.com/Mono-CreateProcess-error-td1525870.html,并且在其他几个地方也会发出警告。
我的应用程序每分钟创建至少10个进程,通常在一秒/半秒内运行,我还调用process.WaitForExit()和process.Dispose()来尝试帮助规避错误,如其他电子邮件和正如我在谷歌上看到的那样,但不幸的是它没有帮助。
发生错误时,会导致未来的任何进程都无法创建。
我想知道是否有人有任何潜在的解决方案,它发生在2.10.2和2.10.6上。
我在这里看到了这个测试/示例案例:
http://lists.ximian.com/pipermail/mono-bugs/2009-September/092261.html
我把它贴在这里以方便使用:
System.Diagnostics.Process[] processes = new System.Diagnostics.Process[4096];
for (int i = 0; i < 4096; i++)
{
Console.WriteLine("Starting: " + i.ToString());
processes[i] = new System.Diagnostics.Process();
processes[i].StartInfo.FileName ="echo";
processes[i].StartInfo.Arguments = "\"hello mono \";";
processes[i].Start();
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.Threading.Thread.Sleep(10);
}
很抱歉重新询问这个问题是否有问题,但我还没有找到合适的解决方案。
谢谢!
答案 0 :(得分:1)
我认为您正在使用文件句柄与每个进程进行通信。
请参阅here:
on 2009-09-06 08:59:10 UTCJoakimSandström写道:
对不起双重帖子。
通过创建第二个循环来解决这个问题,循环使用HasExited。 然后强行(尝试捕获)运行。关闭具有的进程 退出。
这对你有用吗?我相信调用Process.Close()
会关闭打开的文件句柄。