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