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";