my $pid = open(FROMKID, "-|"); # There are now two processes running, one with # $pid set to the PID of the child, and the other # with $pid set to 0 (or undefined upon an error). unless ($pid) { if (!defined($pid)) { system_logger("Unable to fork: $!"); die "fork: $!"; # or just exit as you were } # note that in this test, $pid is undefined, # which means we're the child thread, so no # matter what happens, we must exec or exit/die unless (exec(...)) { system_logger("Cannot exec ...: $!"); die "exec ...: $!"; # or just exit } }