Hello, I'm facing an interesting problem - Bash doesn't execute SIGCHLD traps in the correct context. I'm using bash-4.2.
Take this example: $ reset_trap() { echo RST; trap - CHLD; } $ trap reset_trap CHLD Under dash and ksh, once the trap is set, it will execute once, and then reset, as expected: # DASH $ ls -al total 16 drwxr-xr-x 2 user user 4096 Feb 4 15:23 . drwxr-xr-x 142 user user 12288 Feb 4 15:23 .. RST # trap executed $ ls -al total 16 drwxr-xr-x 2 user user 4096 Feb 4 15:23 . drwxr-xr-x 142 user user 12288 Feb 4 15:23 .. $ # only once Under bash, the trap executes, but does not reset itself. If I set a similar trap on SIGUSR1, it works as expected. After debugging, it appears that the trap does not execute in the right context. $ reset_trap() { echo RST; trap - CHLD; } $ user_trap() { trap; echo USR; trap - USR1; } $ trap reset_trap CHLD $ trap user_trap USR1 $ ls I get this output from the reset_trap handler: trap -- 'user_trap' SIGUSR1 trap -- 'H�M�)' SIGCHLD trap -- '' SIGTSTP trap -- '' SIGTTIN trap -- '' SIGTTOU RST Obviusly, something happened on the way to heaven. I am not sure in which context it will get executed though. Please confirm that this not the expected behaviour of the SIGCHLD trap. Cheers, Alex