cmv has asked for the wisdom of the Perl Monks concerning the following question:
Consider the attached script.
I believe I should get 2 lines of output from each of the 2 children. Running this under perl, v5.8.8 built for darwin works fine. However, when I run it under perl, v5.8.8 built on solaris, strange things happen:
First, why do I sometimes get 4 lines from one “bad” kid??TRY1: CHILD1: My pid = 21727 CHILD1: 1: THIS IS YOUR PARENT SPEAKING... CHILD1: 2: THIS IS YOUR PARENT SPEAKING... CHILD1: 1: THIS IS YOUR PARENT SPEAKING... CHILD1: 2: THIS IS YOUR PARENT SPEAKING... CHILD2: My pid = 21728 CHILD2: 1: THIS IS YOUR PARENT SPEAKING... CHILD2: 2: THIS IS YOUR PARENT SPEAKING... TRY2: CHILD1: My pid = 22218 CHILD1: 1: THIS IS YOUR PARENT SPEAKING... CHILD1: 2: THIS IS YOUR PARENT SPEAKING... CHILD2: My pid = 22219 CHILD2: 1: THIS IS YOUR PARENT SPEAKING... CHILD2: 2: THIS IS YOUR PARENT SPEAKING... CHILD2: 1: THIS IS YOUR PARENT SPEAKING... CHILD2: 2: THIS IS YOUR PARENT SPEAKING...
Second, why does the “bad” kid sometimes change?
Any pointers very much appreciated!
Thanks
-Craig
#!/opt/exp/bin/perl use strict; use warnings; foreach my $i (1..2) { _spawn($i); } sub _spawn { my $id = shift || die "Missing id\n"; my $pid = fork(); defined $pid or die "bad open (pipe/fork): $!\n"; # Have parent/child run their respective code... if ( $pid ) { # PARENT CODE... return; } else { # CHILD CODE... print "CHILD$id: My pid = $$\n" ; while(<DATA>) { print "CHILD$id: $_" }; exit } } __DATA__ 1: THIS IS YOUR PARENT SPEAKING... 2: THIS IS YOUR PARENT SPEAKING...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Stuttering Children
by dave_the_m (Monsignor) on Sep 19, 2014 at 19:00 UTC | |
by cmv (Chaplain) on Sep 20, 2014 at 01:23 UTC | |
by dave_the_m (Monsignor) on Sep 20, 2014 at 09:28 UTC | |
by cmv (Chaplain) on Sep 22, 2014 at 12:14 UTC | |
by dave_the_m (Monsignor) on Sep 22, 2014 at 19:07 UTC | |
|