Signals and Job Control Concepts
Signal Route
Map Signals to Actions
Scripts often choose different cleanup behavior for different signals. A case statement keeps those routes explicit.
Program
Play the script to choose a signal name and see the action a script would plan for it.
signal_route.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash
signal="TERM"
case "$signal" in
INT) action="stop-from-keyboard" ;;
TERM) action="graceful-shutdown" ;;
HUP) action="reload-config" ;;
esac
echo "$signal:$action"
#!/usr/bin/env bash
signal="INT"
case "$signal" in
INT) action="stop-from-keyboard" ;;
TERM) action="graceful-shutdown" ;;
HUP) action="reload-config" ;;
esac
echo "$signal:$action"
#!/usr/bin/env bash
signal="HUP"
case "$signal" in
INT) action="stop-from-keyboard" ;;
TERM) action="graceful-shutdown" ;;
HUP) action="reload-config" ;;
esac
echo "$signal:$action"
signal ← TERM
3signal="TERM"4case "$signal" invalues this stepTERMsignalcase "$signal" in
3signal="TERM"4case "$signal" in5 INT) action="stop-from-keyboard" ;;values this stepTERMsignalaction ← graceful-shutdown
5INT) action="stop-from-keyboard" ;;6TERM) action="graceful-shutdown" ;;7HUP) action="reload-config" ;;values this stepgraceful-shutdownactionecho "$signal:$action"
8esac9echo "$signal:$action"outputTERM:graceful-shutdownvalues this stepTERMsignalgraceful-shutdownaction
signal ← INT
3signal="INT"4case "$signal" invalues this stepINTsignalcase "$signal" in
3signal="INT"4case "$signal" in5 INT) action="stop-from-keyboard" ;;values this stepINTsignalaction ← stop-from-keyboard
4case "$signal" in5 INT) action="stop-from-keyboard" ;;6 TERM) action="graceful-shutdown" ;;values this stepstop-from-keyboardactionecho "$signal:$action"
8esac9echo "$signal:$action"outputINT:stop-from-keyboardvalues this stepINTsignalstop-from-keyboardaction
signal ← HUP
3signal="HUP"4case "$signal" invalues this stepHUPsignalcase "$signal" in
3signal="HUP"4case "$signal" in5 INT) action="stop-from-keyboard" ;;values this stepHUPsignalaction ← reload-config
6 TERM) action="graceful-shutdown" ;;7 HUP) action="reload-config" ;;8esacvalues this stepreload-configactionecho "$signal:$action"
8esac9echo "$signal:$action"outputHUP:reload-configvalues this stepHUPsignalreload-configaction
signal
A signal is a small named notification sent to a process.
case route
`case` makes signal-to-action decisions easy to scan.
modeled action
This example prints the planned action instead of sending real signals.