This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: 1.3.2 : Fork + Sleep = problem


On Wed, Jul 11, 2001 at 03:27:19AM -0600, Adam Stallard wrote:
> Here's a short c program that works as expected compiled under some
> other unix platforms, but not under my cygwin (1.3.2 , Win 2000)
> platform.
> 
> If a call to wait() is added to the code before the sleep command, it
> behaves as expected; but I shouldn't have to do that.
> 
> #include <stdio.h>
> #include <unistd.h>
> 
> void main(){
>   for(int a=0;a<256;a++){
>     pid_t poo=fork();
>     if(!poo)
>       exit(0);
>     sleep(1);
>     printf("%d\n",a);
>   }
> }
> 
> This should count up to 255, pausing 1 second between each count; on my
> cygwin platform it counts up to 63 with pauses, and then rushes through
> the rest of the count.  Select, poll, and usleep also fail in this
> situation.

That's a problem in your application which interferes with a flaw in
Cygwin which will be solved in the next version, though.

Since you only fork() but never wait(), your children processes
become zombies. The zombie list per process is fixed to ... 64 entries.

Obviously you don't expect zombies but there's a difference in
different UNICES how to handle exiting child processes. The BSD signal
model, which is used in Cygwin, only removes zombies after a wait is
performed. The SysV model allows to set SIGCHLD to SIG_IGN, which
results in removing child processes without creating zombies. This
will be supported beginning with Cygwin 1.3.3.

However, your application has a major problem in both models. Either you
wait() (BSD, Cygwin) or you set SIGCHLD to SIG_IGN (SysV) but ignoring
child processes is a NoNo.

Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Developer                                mailto:cygwin@cygwin.com
Red Hat, Inc.

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]