This is the mail archive of the
cygwin-developers@sources.redhat.com
mailing list for the Cygwin project.
RE: A process can't have more than 63 child processes.
- To: <cygwin-developers at cygwin dot com>
- Subject: RE: A process can't have more than 63 child processes.
- From: "Espen Harlinn" <espen dot harlinn at seamos dot no>
- Date: Fri, 9 Feb 2001 02:57:37 +0100
- Reply-To: <eharlinn at online dot no>
Another possible solution would be to create additional threads,
and delegate the WaitForMultipleObjects, using 3 threads, one to
manage the other two, would allow 124 children to be executed.
Espen
> -----Original Message-----
> From: cygwin-developers-owner@sources.redhat.com
> [mailto:cygwin-developers-owner@sources.redhat.com]On Behalf Of
> Christopher Faylor
> Sent: Thursday, February 08, 2001 3:04 PM
> To: cygwin-developers@cygwin.com
> Subject: Re: A process can't have more than 63 child processes.
>
>
> Yep. This has been noted before. The WaitForMultipleObjects
> restriction makes it impractical to have more than 63 children.
>
> I guess we should set PSIZE to 64.
>
> cgf
>
> On Thu, Feb 08, 2001 at 05:58:47PM +0900, Kazuhiro Fujieda wrote:
> >I'm afraid the following includes only problem reports.
> >
> >A process in Cygwin seems able to have up to 1023 children
> >because of the following code of `subproc.cc' and `pinfo.h'.
> >
> >subproc.cc (proc_subproc)
> >247: case PROC_ADDCHILD:
> >248: if (nchildren >= PSIZE - 1)
> >249: system_printf ("nchildren too large %d", nchildren);
> >250: pchildren[nchildren] = vchild;
> >pinfo.h
> >21: #define PSIZE 1024
> >
> >But a process can't have more than 63 child process in practice,
> >because WaitForMultipleObjects can't wait over 64 objects
> >according to MSDN.
> >
> >subproc.cc (wait_subproc)
> >1234: DWORD rc = WaitForMultipleObjects (nchildren +
> 1, events, FALSE,
> >1235: proc_loop_wait);
> >
> >In addition, fork doesn't return any error when a process create
> >too many children, because proc_subproc properly handle this
> >error as quoted above. I expect fork returns -1 and set errno to
> >EAGAIN.
>
>