tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

shell trap vs inherited signal dispositions



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


Home | Main Index | Thread Index | Old Index