Subject: Signal handling bugaboo in command substitution
From: Bart Schaefer <[email-masked]>
To: [email-masked]
Date: Mon, 7 Mar 2016 18:44:06 -0800
List-Id: Zsh Workers List <zsh-workers.zsh.org>

At a PS1 prompt:

torch% print $(sleep 3; echo foo)

Press ctrl+z during the sleep.  Zsh is now hung, because the command
substitution is occuring in prefork() so there's nothing to handle the
stopped children and the parent itself ignores the signal.  Zsh is hung;
it won't return to a prompt, the command substitution will never produce
the awaited output, and nothing (except "kill -CONT" from another shell)
will wake it back up.

I'm not sure what to do here.  In other circumstances it's OK to stop a
command substitution with a ctrl+z, and in any kind of non-interactive
shell or even in a subshell the parent would handle the signal.

Bash appears to leave TSTP blocked here when interactive.  I don't think
testing for interactivity is sufficient in zsh context, though.