I have a process that runs as a daemon forking off child processes when requests come in. To control zombies I have the standard
# Install signal handler for child processes
$SIG{'CHLD'} = sub { while (waitpid(-1,WNOHANG) > 0) {} };
However, the child processes then have to make a system call and I need to trap the exit code
eg..
my $res = system $cmd, $arg;
unless ($res == 0) {
...
}
$? now contains -1 and $! 'No child processes', I understand that this is because of my $SIG{'CHLD'} handler. But how can I get the true exit code and message? I've tried 'local $SIG{'CHLD'} = '' prior to the sys call and that seems to work but looks very clumsy.
What is the best way to get at the exit code?