Thanks for answering, however... On Sat, Oct 20, 2012 at 9:01 PM, Chet Ramey <chet.ra...@case.edu> wrote: > On 10/16/12 4:00 PM, Bob Proulx wrote: >> Francis Moreau wrote: >>> -------------- >>> main_cleanup () { echo main cleanup; } >>> submain_cleanup () { echo sub cleanup; } >>> >>> trap main_cleanup EXIT >>> >>> task_in_background () { >>> echo "subshell $BASHPID" >>> >>> while :; do >>> # echo "FOO" >>> sleep 1 >>> done >>> echo "subshell exiting..." >>> } >>> >>> { >>> trap submain_cleanup EXIT >>> trap >>> task_in_background >>> } & >>> >>> echo exiting... >>> -------------- >>> >>> Sending TERM signal to the subshell doesn't make "submain_cleanup()" >>> to be called. >> >> And it does in ksh93. Hmm... And it does if I comment out the line >> "trap main_cleanup EXIT". It seems to only set the trap if no trap >> handler was previously set. > > Yes, this is a bug in bash-4.2. The subshell doesn't properly reinitialize > the traps if a trap has already been set in the parent. This was fixed in > late July and will be in the next version of bash.
That doesn't explain the following (taken from a previous post): Even weirder: if the subshell exits by calling "exit 1", then the trap handler is not called at all regardless of whether or not the "trap main_cleanup EXIT" is commented you. To make that case work, you need to use the "( ... ) &" construct instead of "{ ... } &" one. Thanks. -- Francis