Christopher Faylor skrev: > On Wed, Jul 19, 2006 at 12:08:24PM +0200, Corinna Vinschen wrote: >>On Jul 18 17:45, Bruce Dobrin wrote: >>> Hi, >>> I stripped down the code to a small testable bit. The problem seems to >>> occur when I reach 256 forks on a cygwin1.5.18 or 19 but not on my >>> cygwin1.5.5. win2k system. The original code give the forked process >>> time to finish, but it still looks like it eats it after about 256 >>> iterations ( it actually failed between 259 and 252 iterations, but >>> it's pretty complicated so I'm not sure what else was happening). >>> >>> Here is my test code: >>> [EMAIL PROTECTED]:/tmp> cat test8.pl >>> ################ >>> #!/usr/bin/perl -w >>> >>> use strict; >>> my $pid; >>> >>> foreach my $incr (`seq 1 1 800`) { >>> >>> unless (defined ($pid = fork)) { >>> die " cannot fork $!"; >>> } >>> unless ($pid) { >>> print " the sequence is $incr \n"; >>> exit; >>> } >>> print "pid is $pid\n"; >>> } >>> >>> ############### >>> >>> The error here is : >>> cannot fork Resource temporarily unavailable at ./test8.pl line 11. >>> panic: MUTEX_LOCK (45) [op.c:354].
Suggestion install a handler for sigchld and reap them as they die see below. Warning dont do to much in the handler. see man perlvar for %SIG #!/usr/bin/perl use warnings; use strict; my $pid; sub foo{ print ("process ",wait," died\n"); } foreach my $incr (`seq 1 1 8`) { $SIG{CHLD}=\&foo; unless (defined ($pid = fork)) { die " cannot fork $!"; } unless ($pid) { print " the sequence is $incr \n"; exit; } print "pid is $pid\n"; } ############### -- Bengt-Arne Fjellner -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/