<p style="margin: 0px; padding: 0px;">Yes, Tom, I think it could be the problem.</p><p style="margin: 0px; padding: 0px;">For the moment I solved with a workaround. I changed the architecture and made up threads instead of processes. Anyways I think there are several situations where having more than 255 processes is possible.</p><p style="margin: 0px; padding: 0px;">Another difference I noticed is that when you create child processes and kill the main program, under windows the processes are killed, whereas they continue to live on linux. </p><p style="margin: 0px; padding: 0px;"><br></p><p style="margin: 0px; padding: 0px;"><i>Tom wrote:</i></p><p style="margin: 0px; padding: 0px;"><i>Might it have to do with the fact that Mono only allows 256 shared handles?

See _WAPI_HANDLE_INITIAL_COUNT in wapi-private.h and the "/* FIXME: grow
the arrays */" in handles.c _wapi_handle_real_new().

We ran into a problem like this on a build box that exec'd a lot of
processes but we worked around it by using GC.Collect();
GC.WaitForPendingFinalizers(); GC.Collect(); to clean up the handles.

Tom
</i></p><p style="margin: 0px; padding: 0px;"><br></p>
<blockquote>
----Messaggio originale----<br>
Da: fcolle@libero.it<br>
Data: 13/06/2011 16.10<br>
A: &lt;mono-devel-list@lists.ximian.com&gt;<br>
Ogg: System.Diagnostics.Process.Start() crashes when trying to allocate more than 255 processes<br>
<br>
<p><span>Dear all,
 my linux application needs to start a big number (400) of processes. Each process is a mono application. 
I found the when trying to run more then 255 processes the runtime generates an exception.</span><br><span>
The problem does NOT arise when executing other processes, like e.g. bash.

</span></p><h2><span>Example</span></h2><p><span>
</span><span>
The following two executables classes are a simple proof of concept. 
Just compile the second class and put in into the /tmp folder</span><span>
</span></p><h2><span>MAIN PROGRAM</span></h2><p><span>
</span><code><span>
</span></code></p><pre><span>using System;
using System.Collections.Generic;
using System.Text;

using System.Diagnostics;

namespace CrashTester
{
    class Program
    {
        static void Main(string[] args)
        {
            ///In the real application this dictionary
            /// contains useful data. When a process dies,
            /// it can be started again with the same input parameters
            
            try
            {
                for (int i = 0; i &lt; 260; i++)
                {
                    Console.Error.WriteLine("STARTING PROCESS: "+(i+1).ToString());
                    ProcessStartInfo startinfo = new ProcessStartInfo();
                    startinfo.FileName = "/usr/local/bin/mono";                                
                    startinfo.Arguments = "/tmp/ToCrash.exe "+(i+1).ToString();
                    startinfo.UseShellExecute = false;
                    startinfo.RedirectStandardError = false;
                    startinfo.RedirectStandardOutput = false;
                    Process p = new Process();
                    p.StartInfo = startinfo;                    
                    p.Start();
                }
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
                Console.Error.WriteLine("ERROR IN START PROCESS!");
            }
                        
            Console.ReadKey();

        }
    }
}

</span></pre><p><span>
</span><span>
</span></p><h2><span>CHILD PROCESSES</span></h2><p><span>
</span></p><pre><code><span>
using System;
using System.Collections.Generic;
using System.Text;

namespace ToCrash
{
    class Program
    {
        static void Main(string[] args)
        {
                        if((args!=null)&amp;&amp;(args.Length&gt;0))
                        {
              Console.WriteLine(args[0]);
                        }
            Console.ReadLine();
        }
    }
}</span></code></pre><div style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;" id="_mcePaste">&nbsp;</div><br>
</blockquote><p><br></p>