From: Iker Arizmendi on
Because the Cygwin project relied solely on Win32 APIs its fork implementation
is non-COW and inefficient in those cases where a fork is not followed by
exec.
It's also rather complex. See here (section 5.6) for details:


http://www.redhat.com/support/wpapers/cygnus/cygnus_cygwin/architecture.html

Regards,
Iker

"JD" wrote:

> You can take a look to see how Cygwin implemented this. Cygwin is a Unix
> emulation library and I recall reading about how they implemented fork().
>
> "Iker Arizmendi" <IkerArizmendi(a)discussions.microsoft.com> wrote in message
> news:61CECC87-CC3C-4588-B47F-C0ECECE05FB8(a)microsoft.com...
> > Is it possible to implement something that resembles
> > UNIX fork() with NtCreateProcess/NtCreateThread and
> > which is usable for non-GUI applications running under
> > the Win32 subsystem? The CreateProcess API provides
> > handle inheritance, so that part seems compatible with
> > Win32. However, whether a parent's address space can be
> > usefully inherited by a child is not clear. There are
> > suggestions on the web that setting SectionHandle to
> > NULL goes some way towards this, but I could find nothing
> > on the impact this would have on Win32 DLLs already
> > mapped by the parent, the setup of a child's stack,
> > registration of the child with Win32, etc.
> >
> > Regards,
> > Iker Arizmendi
> >
>
>
>