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