Skip to content

Instantly share code, notes, and snippets.

@x-yuri
Last active November 10, 2021 00:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save x-yuri/addecad8b7668ac20add6c648598ef2e to your computer and use it in GitHub Desktop.
Save x-yuri/addecad8b7668ac20add6c648598ef2e to your computer and use it in GitHub Desktop.
Passing a signal to an EXIT handler #sh #bash #dash #busybox #debian #alpine #trap #exit #int

Passing a signal to an EXIT handler

The signal that killed the process is not passed on Debian < 10 (dash < 0.5.10). And for some reason kill doesn't terminate the handler.

a.sh:

trap 'exit 123' INT
trap 'echo EXIT $?; trap - INT; kill -INT $$; echo after kill' EXIT
sleep 3

Arch Linux (bash-5.1.8):

$ bash h.sh & pid=$!; sleep 1; kill -INT $pid; wait $pid
[1] 236263
EXIT 123
[1]+  Interrupt               bash h.sh

Alpine Linux 3.14 (busybox-1.33.1):

/app # sh h.sh & pid=$!; sleep 1; kill -INT $pid; wait $pid
EXIT 123
[1]+  Interrupt                  sh h.sh

Debian 8 (dash-0.5.7):

$ sh h.sh & pid=$!; sleep 1; kill -INT $pid; wait $pid
[1] 10546
EXIT 123
after kill
[1]+  Exit 123                sh h.sh

Debian 9 (dash-0.5.8):

$ sh h.sh & pid=$!; sleep 1; kill -INT $pid; wait $pid
[1] 1639
EXIT 123
after kill
[1]+  Exit 123                sh h.sh

Debian 10 (dash-0.5.10):

$ sh h.sh & pid=$!; sleep 1; kill -INT $pid; wait $pid
[1] 11731
EXIT 123
[1]+  Interrupt               sh h.sh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment