Use trap in Bash to trap signals
Posted on 2015-01-09 in Trucs et astuces Last modified on: 2017-09-05
Bash can intercept signals send by some special keys like Ctrl-C and change their default behaviour. In order to do that, you must use the trap command. This command take as argument the command you want to execute when the signal is emitted and the list of signals you want to trap.
For instance:
trap "echo yollo" 2 3
will print yollo when Ctrl-C is pressed.
To get the list of all signals, with their numbers and their names, you can use kill.
kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9)SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS
To use the names of the signal instead, use:
trap "echo 'sig INT caught' " INT
You can also use it to kill the children of a process with:
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT