diff -r d26a40d21d7a src/exec.c --- a/src/exec.c Tue May 27 10:16:49 2014 -0600 +++ b/src/exec.c Tue May 27 10:44:25 2014 -0600 @@ -911,8 +911,13 @@ { unsigned char signo = (unsigned char)s; - /* Only forward user-generated signals. */ - if (info != NULL && info->si_code == SI_USER) { + /* + * Only forward user-generated signals not sent by the command. + * Signals sent by the kernel may include SIGTSTP when the user + * presses ^Z. Curses programs often trap ^Z and send SIGTSTP + * to their pgrp, so we don't want to send an extra SIGTSTP. + */ + if (info != NULL && info->si_code == SI_USER && info->si_pid != cmnd_pid) { /* * The pipe is non-blocking, if we overflow the kernel's pipe * buffer we drop the signal. This is not a problem in practice.