[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: SIGTERM ignored before exec race
From: |
Chet Ramey |
Subject: |
Re: SIGTERM ignored before exec race |
Date: |
Sun, 17 Feb 2013 21:39:29 -0500 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/17.0 Thunderbird/17.0 |
On 2/17/13 7:46 PM, Pádraig Brady wrote:
>>> I notice the following will wait for 5 seconds for
>>> the timeout process to end with SIGALRM, rather than
>>> immediately due to kill sending the SIGTERM.
>>
>> I think the way to approach this is to change the SIGTERM handling from
>> straight SIG_IGN to a handler installed with SA_RESTART that catches the
>> signal but does nothing with it.
>>
>> That will allow the shell to note whether it receives a SIGTERM between
>> fork and exec and react accordingly.
>
> Thanks for continuing to look at this.
> Just in case you need to consider other options,
> elaborating a bit on my previous suggestion:
I looked at this, and it ended up being a little more complicated and a
little less flexible than the approach I adopted.
> Your suggested method I think is to have a handler something like
> the following which should work too, but perhaps with the caveat
> that the exit status of the child before the exec might not have
> the signal bit set.
No, much simpler. The signal handler just sets a flag. It's only
installed by interactive shells, so the flag never changes in any other
shell. Setting the flag to 0 at appropriate times and checking for
non-zero values at appropriate times is all that's needed. If a child
process finds the flag non-zero, it calls the usual terminating signal
handler, which ends up killing the shell with the same signal.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/