Can anyone tell me why the last child process will not exit.The program tries to calculate PI using children to split progress and sum the answers at end,but will not return last calculation and exit.
#!/usr/bin/perl -w use feature 'say'; use IO::Handle; my $total=0.0; @waitlist = qw(0 200 400 600 800 1000); foreach $item (@waitlist) { pipe(*{$item},RETHAND); *{$item}->autoflush(1); RETHAND->autoflush(1); unless (my $pid = fork()) { my $h = 1.0 /1200.0; my $sum = 0.0; for (my $i = $item; $i < ($item+200); $i++){ my $x = $h * ($i - 0.5); $sum += 4.0 / (1.0 + $x*$x); } my $ret=$sum*$h; print RETHAND "$ret"; exit; } } foreach $item (@waitlist) { $response = <$item>; $total+= ($response+0.0); print "$total\n"; } 1 while (wait() != -1); print " $total\n"; print "All done!\n";
In reply to Trouble with child processes by grasshopper!!!
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |