[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 5.0 regression: Script stuck when waiting in trap
From: |
Chet Ramey |
Subject: |
Re: 5.0 regression: Script stuck when waiting in trap |
Date: |
Mon, 3 Jun 2019 15:42:22 -0400 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 |
On 6/2/19 7:55 AM, mwnx wrote:
> Bash Version: 5.0
> Patch Level: 3
> Release Status: release
>
> Description:
> Since bash 5.0, a subshell can get stuck (wait forever) in
> what looks like a pretty specific set of circumstances,
> namely when combining a group command or a function call
> with process substitution and attempting to `wait` for said
> group command or function from within a trap.
>
> Repeat-By:
> $ cat <<'EOF' | bash
> (
> trap 'wait' EXIT
> { sleep 2; } > >(cat)
> ) &
> sleep 1
> kill $!
> wait
> EOF
> <ctrl-C after a few seconds of waiting>
> # The process is actually still alive, even after ctrl-C...
> $ pstree -p
> sh(1)-+-bash(6)---pstree(321)
> `-bash(316)---bash(318)---cat(320)
Here's what happens. The relevant change is that wait without options now
waits for the last process substitution, since that sets $! and is "known"
to the shell.
The sequence of events is approximately:
1. Subshell starts, forks to run process substitution, opens a pipe to the
process substitution, and runs the group command. The group command
means the redirection is performed by the subshell, not the `sleep',
since the redirections persist for the entire group command.
2. Main shell starts, runs sleep, kills the subshell started in step 1.
This doesn't kill the sleep or the cat. The sleep exits on its own.
The cat continues to run.
3. The main shell waits for the subshell.
4. The subshell, having received a fatal signal, runs the exit trap and
waits for the process substitution ($!). It doesn't have a chance to do
anything with the the file descriptor open to the process substitution
as the result of the redirection, and the `cat' continues to run because
it doesn't get the signal. The wait doesn't complete.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU chet@case.edu http://tiswww.cwru.edu/~chet/
- 5.0 regression: Script stuck when waiting in trap, mwnx, 2019/06/02
- Re: 5.0 regression: Script stuck when waiting in trap,
Chet Ramey <=
- Re: 5.0 regression: Script stuck when waiting in trap, mwnx, 2019/06/04
- Re: 5.0 regression: Script stuck when waiting in trap, Chet Ramey, 2019/06/04
- Re: 5.0 regression: Script stuck when waiting in trap, mwnx, 2019/06/06
- Re: 5.0 regression: Script stuck when waiting in trap, Chet Ramey, 2019/06/06
- Re: 5.0 regression: Script stuck when waiting in trap, mwnx, 2019/06/09
- Re: 5.0 regression: Script stuck when waiting in trap, Chet Ramey, 2019/06/10
- Re: 5.0 regression: Script stuck when waiting in trap, Robert Elz, 2019/06/06
- Re: 5.0 regression: Script stuck when waiting in trap, Chet Ramey, 2019/06/06
- Re: 5.0 regression: Script stuck when waiting in trap, Chet Ramey, 2019/06/06