[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Clarification needed on signal spec EXIT
From: |
Francis Moreau |
Subject: |
Re: Clarification needed on signal spec EXIT |
Date: |
Sun, 21 Oct 2012 13:35:30 +0200 |
Thanks for answering, however...
On Sat, Oct 20, 2012 at 9:01 PM, Chet Ramey <chet.ramey@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