defined (my $kid = waitpid -1, WNOHANG)
or sysfail "failed to reap child: $!";
last KID if $kid <= 0;
+ my $st = ${^CHILD_ERROR_NATIVE};
my ($how, $rc);
- if ($? == 0) {
+ if (WIFEXITED($st) && WEXITSTATUS($st) == 0) {
$how = "exited successfully";
$rc = 0;
- } elsif ($? & 0xff) {
- my $sig = $? & 0x7f;
+ } elsif (WIFSIGNALED($st)) {
+ my $sig = WTERMSIG($st);
$how = "killed by signal $sig";
$how .= " (core dumped)" if $? & 0x80;
$rc = $sig | 0x80;
} else {
- $rc = $? >> 8;
+ $rc = WEXITSTATUS($st);
$how = "exited with status $rc";
}
if ($kid == $CLIENTKID) {