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