bug-bash
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]