in reply to Re: fork and print..
in thread fork and print..

hmmmm.... curiouser and curiouser...

I just did the same thing as jepri and it still DIDNT work!!????

This suggests to me that something about my installation is broken - I am running Perl version 5.004_04 built for sun4-solaris on SunOS 5.6 - Does anyone know what could cause a problem like this with this config?

just in case here is the exact code I ran and the results:

open(MFOUT,">mfout.txt"); while (<STDIN>) { print MFOUT $_; print $_; } my @commands = ("ls","ls *","cat a","cat x"); my %running = (); my $max_jobs = 200; my $job_count = 0; while ( @commands || %running ) { if ( @commands && ($job_count < $max_jobs)) { my $command = shift(@commands); my $pid; if ($pid = fork) { print "Parent Pid $$\n"; $running{$pid} = $command; ++$job_count; } else { die "cannot fork: $!" unless defined $pid; print "Child Pid $$ $command\n"; my $rc = system $command; exit($rc>>8); } } else { my $child_pid = wait(); if (! exists $running{$child_pid}) { warn "Reaped unkown process id $child_pid!!"; } elsif ($?) { my $rc = $? >> 8; warn "Process '$child_pid:$running{$child_pid}' errored with retu ++rn code ' $rc'"; } print "command '$running{$child_pid}' completed\n"; delete $running{$child_pid}; --$job_count; } }
when I ran this with input:
line1
line2
line3
line4

I got the same output on STDOUT, but mfout.txt contained:
line1
line2
line3
line4
line1
line2
line3
line4
line1
line2
line3
line4
line1
line2
line3
line4
line1
line2
line3
line4

Replies are listed 'Best First'.
Re: Re: Re: fork and print..
by Kung (Initiate) on May 17, 2001 at 09:34 UTC
    woops - forgot to log in - that anonymous monk above is me :)
      Tell me what happens when you run this:

      open(MFOUT,">mfout.txt"); my @commands= ( 'echo "Hello1"', 'echo "Hello2"', 'echo "Hello3"', 'echo "Hello4"', 'echo "Hello5"', ); my %running = (); my $max_jobs = 2; my $job_count = 0; while ( @commands || %running ) { if ( @commands && ($job_count < $max_jobs)) { my $command = shift(@commands); my $pid; if ($pid = fork) { print "Parent Pid $$\n"; $running{$pid} = $command; ++$job_count; } else { die "cannot fork: $!" unless defined $pid; print "Child Pid $$ $command\n"; print MFOUT `$command`; my $rc = system $command; exit($rc>>8); } } else { my $child_pid = wait(); if (! exists $running{$child_pid}) { warn "Reaped unkown process id $child_pid!!"; } elsif ($?) { my $rc = $? >> 8; warn "Process '$child_pid:$running{$child_pid}' errored with retu +rn code '$ rc'"; } print "command '$running{$child_pid}' completed\n"; delete $running{$child_pid}; --$job_count; } } print "The end!\n"; print MFOUT "The end!\n";

      ____________________
      Jeremy
      I didn't believe in evil until I dated it.