in reply to Re: IO::Select - is it right for this?
in thread IO::Select - is it right for this?
Two problems:$g=10; $|=1; for ($i=0; $i<$g; $i++) { pipe ($rh, $wh); # both of these are generated in the loop if ($pid[$i]=fork()) { # parent process waitpid($pid[$i], 0); # wait for child close ($wh); while (<$rh>) { # gimme the output if ($_ =~ m/^Error/) { push (@error, $_); } elsif ($_ =~ m/^Hits/) { push (@hits, $_); } else { push (@data, $_); } # each is a result from an engine } } else { close ($rh); open (STDOUT, ">&$wh"); $|=1; print "I will wait for ",$i+2," seconds\n"; sleep $i+1; print "Good morning. I slept about ",$i+2," seconds\n"; exit(0); } } print @data;
But the output should be something like this:I will wait for 2 seconds Good morning. I slept about 2 seconds I will wait for 3 seconds Good morning. I slept about 3 seconds I will wait for 4 seconds Good morning. I slept about 4 seconds I will wait for 5 seconds Good morning. I slept about 5 seconds I will wait for 6 seconds Good morning. I slept about 6 seconds I will wait for 7 seconds Good morning. I slept about 7 seconds I will wait for 8 seconds Good morning. I slept about 8 seconds I will wait for 9 seconds Good morning. I slept about 9 seconds I will wait for 10 seconds Good morning. I slept about 10 seconds I will wait for 11 seconds Good morning. I slept about 11 seconds
which I produced with a variant of my former version:I will wait for 2 seconds I will wait for 3 seconds I will wait for 4 seconds I will wait for 5 seconds I will wait for 6 seconds I will wait for 7 seconds I will wait for 8 seconds I will wait for 9 seconds I will wait for 10 seconds I will wait for 11 seconds Good morning. I slept about 2 seconds Good morning. I slept about 3 seconds Good morning. I slept about 4 seconds Good morning. I slept about 5 seconds Good morning. I slept about 6 seconds Good morning. I slept about 7 seconds Good morning. I slept about 8 seconds Good morning. I slept about 9 seconds Good morning. I slept about 10 seconds Good morning. I slept about 11 seconds
#!/usr/local/bin/perl use warnings; use strict; my $children= 10; my @out; my $first_child; $|=1; my $pid= open($first_child, '-|'); if ($pid) { # parent @out= <$first_child>; } else { my(@child, @childpid); for (my $i=0; $i<$children; ++$i) { $childpid[$i]= open($child[$i], '|-'); if ($childpid[$i]) { # do nothing yet } else { print "I will wait for ",$i+2," seconds\n"; sleep $i+1; print "Good morning. I slept about ",$i+2," seconds\n"; exit; } } foreach (@child) { close $_; } exit; } print @out;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Re: IO::Select - is it right for this?
by mcogan1966 (Monk) on Oct 22, 2003 at 12:44 UTC | |
by mcogan1966 (Monk) on Oct 22, 2003 at 12:54 UTC | |
by Skeeve (Parson) on Oct 23, 2003 at 06:51 UTC |