in reply to Children and return codes

You while loop will terminate when you've reached EOF on the pipe or there was an error. In the first case $bytes will be 0 and the second it'll be undef. To get the exit status of the child, you don't need to install a SIGCHLD handler. Just waitpid for the child process to terminate and check $?. So, here's one way to get the status w/o using SIGCHLD:
use POSIX ":sys_wait_h"; my $pid = open(INPIPE, "$reader_prog $options |") or die "open failed: + $!"; while ($bytes = read(INPIPE, $bugger, 32768)) { print $buffer; } if (!defined($bytes)) { print "read error: $!\n"; } my $kid = waitpid($pid, WNOHANG); unless ($kid == $pid) { print "child process $pid is still running\n"; print "trying close\n"; close(INPIPE); print "child status is $?\n"; } else { print "child process $pid reaped, status is: $?\n"; }
Notes: