You have a race condition in your parent code:
kill (POSIX::SIGUSR2, $pid); $SIG{CHLD} = 'IGNORE';
(You send the signal to your child before you set the $SIG{CHLD} handler.)
Try swapping those two statements, for a start.
Beyond that, I wonder why you set $SIG{CHLD} = 'IGNORE' but then loop on wait() in the normal execution flow? It's unlikely that's causing your bug, but the docs are a little non-committal on this (emphasis mine):
Calling wait() with $SIG{CHLD} set to "IGNORE" usually returns -1 on such platforms.
'IGNORE' is most useful when you really don't care. But if you don't want to exit until all of your children exit, I'd recommend just using your own wait() or waitpid() loop, perhaps in conjunction with a custom signal handler if you need out-of-band child exit notifications.
In reply to Re: SIG CHLD IGNORE and wait at same time
by rjt
in thread SIG CHLD IGNORE and wait at same time
by vsespb
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |