in reply to SIG CHLD IGNORE and wait at same time
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: SIG CHLD IGNORE and wait at same time
by vsespb (Chaplain) on Aug 03, 2013 at 18:03 UTC | |
by rjt (Curate) on Aug 04, 2013 at 03:47 UTC | |
by vsespb (Chaplain) on Aug 04, 2013 at 10:16 UTC | |
by rjt (Curate) on Aug 04, 2013 at 11:21 UTC |