Trapping Interrupts

Problem

You are writing a script that needs to be able to trap signals and respond accordingly.

Solution

Use the trap utility to set signal handlers. First, use trap -l (or kill -l) to list the signals you may trap. They vary from system to system:

# NetBSD
$ trap -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
 13) SIGPIPE  14)  SIGALRM    15) SIGTERM   16) SIGURG
 17) SIGSTOP  18)  SIGTSTP    19) SIGCONT   20) SIGCHLD
 21) SIGTTIN  22)  SIGTTOU    23) SIGIO     24) SIGXCPU
 25) SIGXFSZ  26)  SIGVTALRM  27) SIGPROF   28) SIGWINCH
 29) SIGINFO  30)  SIGUSR1    31) SIGUSR2   32) SIGPWR
 # Linux
 $ trap -l
   1) SIGHUP        2) SIGINT        3)  SIGQUIT      4) SIGILL
   5) SIGTRAP       6) SIGABRT       7)  SIGBUS       8) SIGFPE
   9) SIGKILL      10) SIGUSR1      11) SIGSEGV      12) SIGUSR2
  13) SIGPIPE      14) SIGALRM      15) SIGTERM      17) SIGCHLD
  18) SIGCONT      19) SIGSTOP      20) SIGTSTP      21) SIGTTIN
  22) SIGTTOU      23) SIGURG       24) SIGXCPU      25) SIGXFSZ
  26) SIGVTALRM    27) SIGPROF      28) SIGWINCH     29) SIGIO
  30) SIGPWR       31) SIGSYS       33) SIGRTMIN     34) SIGRTMIN+1
  35) SIGRTMIN+2   36) SIGRTMIN+3   37) SIGRTMIN+4   38) SIGRTMIN+5
  39) SIGRTMIN+6   40) SIGRTMIN+7   41) SIGRTMIN+8   42) SIGRTMIN+9
  43) SIGRTMIN+10  44) SIGRTMIN+11  45) SIGRTMIN+12  46) SIGRTMIN+13
  47) SIGRTMIN+14  48) SIGRTMIN+15  49) SIGRTMAX-15  50) SIGRTMAX-14
  51) SIGRTMAX-13  52) SIGRTMAX-12  53) SIGRTMAX-11  54) SIGRTMAX-10
  55) SIGRTMAX-9   56) SIGRTMAX-8   57) SIGRTMAX-7   58) SIGRTMAX-6
  59) SIGRTMAX-5   60) SIGRTMAX-4   61) SIGRTMAX-3   62) SIGRTMAX-2
  63) SIGRTMAX-1   64) SIGRTMAX

Next, ...

Get bash Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.