CreateProcess:创建进程句柄时出错

时间:2012-01-08 22:31:51

标签: c# linux process mono

最近我一直在使用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);
}

很抱歉重新询问这个问题是否有问题,但我还没有找到合适的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您正在使用文件句柄与每个进程进行通信。

请参阅here

  

on 2009-09-06 08:59:10 UTCJoakimSandström写道:

     

对不起双重帖子。

     

通过创建第二个循环来解决这个问题,循环使用HasExited。   然后强行(尝试捕获)运行。关闭具有的进程   退出。

这对你有用吗?我相信调用Process.Close()会关闭打开的文件句柄。