On Sun, Apr 07, 2024 at 07:18:52PM +0800, Herbert Xu wrote: > On Fri, Mar 29, 2024 at 04:39:01PM +0100, Johannes Altmanninger wrote: > > > > diff --git a/src/trap.c b/src/trap.c > > index cd84814..dbf81ea 100644 > > --- a/src/trap.c > > +++ b/src/trap.c > > @@ -272,7 +272,7 @@ ignoresig(int signo) > > signal(signo, SIG_IGN); > > } > > if (!vforked) > > - sigmode[signo - 1] = S_HARD_IGN; > > + sigmode[signo - 1] = S_IGN; > > This is buggy if sigmode is already S_HARD_IGN. You can fix > this by moving the if statement inside the previous one. > > Please also add a comment stating that sigmode has already been > initialised by setinteractive, as otherwise we may also lose a > hard ignore. I'm not really following the last part; maybe it's no longer relevant with the bug fix. Note that it works the same whether "set -i" or "trap - INT" is used, also in noninteractive shells like dash -c '( trap - INT; sleep inf ) & read _'