When run under nohup bash prints that SIGHUP is ignored (empty string): $ rm -f nohup.out; nohup bash -c 'trap -p'; cat nohup.out sending output to nohup.out trap -- '' SIGHUP
But sh prints that SIGHUP has the default disposition: $ rm -f nohup.out; nohup sh -c 'trap -p'; cat nohup.out sending output to nohup.out trap -- - EXIT HUP INT QUIT ILL TRAP ABRT EMT FPE BUS SEGV SYS PIPE trap -- - ALRM TERM URG TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF trap -- - WINCH INFO USR1 USR2 PWR RT0 RT1 RT2 RT3 RT4 RT5 RT6 RT7 trap -- - RT8 RT9 RT10 RT11 RT12 RT13 RT14 RT15 RT16 RT17 RT18 RT19 RT20 trap -- - RT21 RT22 RT23 RT24 RT25 RT26 RT27 RT28 RT29 RT30 though, it seems SIGHUP _is_ correctly ignored, e.g. the following baseline example: $ sh -xc 'trap -p; (trap -p; sleep 3; echo oh hai) & sleep 1; kill -HUP $!; wait' + trap -p trap -- - EXIT HUP INT QUIT ILL TRAP ABRT EMT FPE BUS SEGV SYS PIPE trap -- - ALRM TERM URG TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF trap -- - WINCH INFO USR1 USR2 PWR RT0 RT1 RT2 RT3 RT4 RT5 RT6 RT7 trap -- - RT8 RT9 RT10 RT11 RT12 RT13 RT14 RT15 RT16 RT17 RT18 RT19 RT20 trap -- - RT21 RT22 RT23 RT24 RT25 RT26 RT27 RT28 RT29 RT30 + sleep 1 + trap -p trap -- - EXIT HUP INT QUIT ILL TRAP ABRT EMT FPE BUS SEGV SYS PIPE trap -- - ALRM TERM URG TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF trap -- - WINCH INFO USR1 USR2 PWR RT0 RT1 RT2 RT3 RT4 RT5 RT6 RT7 trap -- - RT8 RT9 RT10 RT11 RT12 RT13 RT14 RT15 RT16 RT17 RT18 RT19 RT20 trap -- - RT21 RT22 RT23 RT24 RT25 RT26 RT27 RT28 RT29 RT30 + sleep 3 + kill -HUP 16771 + wait [1] Hangup (trap -p; sleep 3; echo oh hai) vs. with the same example under nohup, where HUP is correctly ignored by the backgrounded subshell: $ rm -f nohup.out; \ nohup sh -xc 'trap -p; (trap -p; sleep 3; echo oh hai) & sleep 1; kill -HUP $!; wait'; \ cat nohup.out sending output to nohup.out + trap -p trap -- - EXIT HUP INT QUIT ILL TRAP ABRT EMT FPE BUS SEGV SYS PIPE trap -- - ALRM TERM URG TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF trap -- - WINCH INFO USR1 USR2 PWR RT0 RT1 RT2 RT3 RT4 RT5 RT6 RT7 trap -- - RT8 RT9 RT10 RT11 RT12 RT13 RT14 RT15 RT16 RT17 RT18 RT19 RT20 trap -- - RT21 RT22 RT23 RT24 RT25 RT26 RT27 RT28 RT29 RT30 + sleep 1 + trap -p trap -- - EXIT HUP INT QUIT ILL TRAP ABRT EMT FPE BUS SEGV SYS PIPE trap -- - ALRM TERM URG TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF trap -- - WINCH INFO USR1 USR2 PWR RT0 RT1 RT2 RT3 RT4 RT5 RT6 RT7 trap -- - RT8 RT9 RT10 RT11 RT12 RT13 RT14 RT15 RT16 RT17 RT18 RT19 RT20 trap -- - RT21 RT22 RT23 RT24 RT25 RT26 RT27 RT28 RT29 RT30 + sleep 3 + kill -HUP 15858 + wait + echo oh hai oh hai Same with bash: $ rm -f nohup.out; \ nohup bash -xc 'trap -p; (trap -p; sleep 3; echo oh hai) & sleep 1; kill -HUP $!; wait'; \ cat nohup.out sending output to nohup.out + trap -p trap -- '' SIGHUP + sleep 1 + trap -p trap -- '' SIGHUP trap -- '' SIGINT + sleep 3 + kill -HUP 13993 + wait + echo oh hai oh hai So I would expect our shell's trap -p to also print trap -- '' SIGHUP in a non-interactive shell under nohup. Do I miss something here? -uwe