my $pid1 = open( my $fh1, '|-');
if ( $pid1 == 0 )
{
print "child1 sez: $$ forked, now exec()ing false!!\n";
exec (qw/false/) or die "Can't exec false $!";
}
my $pid2 = open( my $fh2, '|-');
if ( $pid2 == 0 )
{
print "child2 sez: $$ forked, now exec()ing true!!\n";
exec (qw/true/) or die "Can't exec false $!";
}
sleep 1; # just so the output makes more sense
print "Hi, I'm the parent, and I'm going to wait for pid1=($pid1) and
+pid2=($pid2)!\n";
my $dead_pid;
$dead_pid = waitpid $pid1, 0;
print "parent sez: pid $dead_pid exited with status $?\n";
$dead_pid = waitpid $pid2, 0;
print "parent sez: pid $dead_pid exited with status $?\n";
Output is:
child1 sez: 19628 forked, now exec()ing false!!
child2 sez: 19629 forked, now exec()ing true!!
Hi, I'm the parent, and I'm going to wait for pid1=(19628) and pid2=(1
+9629)!
parent sez: pid 19628 exited with status 256
parent sez: pid 19629 exited with status 0