Google
[IT] Bash shell: trap, catturare i segnali

Bash shell: trap, catturare i segnali

1) trap -l
2) trap "echo \"catturato\"" 14
3) trap -p
Il comando "trap" fa parte di quelli interni alla shell Bash. Serve a catturare determinati segnali dalla shell e compiere opportune operazioni in conseguenza. Ad esempio, se si volesse catturare il segnale numero 14, ovvero SIGALRM ( vedere anche "Articoli/Segnali in C") si potrebbe usare
trap "echo \"catturato\"" 14
Questo comando permette alla shell bash di catturare il segnale SIGALRM e di fornire sull'output il messaggio "catturato". Potrebbero essere configurate anche altre operazioni, come script, invio email, ecc.
trap -p
L'opzione "-p" consente di elencare tutte le assegnazioni segnale/operazione fatte in precedenza.
Un esempio:
  [user@server user]$ trap -p
  [user@server user]$ trap "echo \"catturato\"" 14
  [user@server user]$ trap -p
  trap -- 'echo "catturato"' SIGALRM
Una lista dei processi catturabili e' data da
trap -l
Vediamo infine un esempio completo, a partire dall'elenco dei segnali, fino all'utilizzo pratico, supponendo che l'id di processo della shell che si sta usando sia 12345 (usare "ps"):
  [user@server user]$ 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      32) SIGRTMIN    33) SIGRTMIN+1
  34) SIGRTMIN+2  35) SIGRTMIN+3  36) SIGRTMIN+4  37) SIGRTMIN+5
  38) SIGRTMIN+6  39) SIGRTMIN+7  40) SIGRTMIN+8  41) SIGRTMIN+9
  42) SIGRTMIN+10 43) SIGRTMIN+11 44) SIGRTMIN+12 45) SIGRTMIN+13
  46) SIGRTMIN+14 47) SIGRTMIN+15 48) SIGRTMAX-15 49) SIGRTMAX-14
  50) SIGRTMAX-13 51) SIGRTMAX-12 52) SIGRTMAX-11 53) SIGRTMAX-10
  54) SIGRTMAX-9  55) SIGRTMAX-8  56) SIGRTMAX-7  57) SIGRTMAX-6
  58) SIGRTMAX-5  59) SIGRTMAX-4  60) SIGRTMAX-3  61) SIGRTMAX-2
  62) SIGRTMAX-1  63) SIGRTMAX
  [user@server user]$ trap -p
  [user@server user]$ trap "echo \"catturato\"" 14
  [user@server user]$ trap -p
  trap -- 'echo "catturato"' SIGALRM
  [user@server user]$ kill -14 12345
  catturato
  [user@server user]$
Esistono anche altri due valori non elencati che si possono usare. Con "0" oppure "EXIT", si cattura l'uscita dalla shell. Con "DEBUG", l'azione viene eseguita dopo ogni semplice comando.
"kill", a dispetto del nome, invia segnali, non serve solo ad uccidere processi.
trap "-" 14
Cosi' vengono ripristinate le impostazioni iniziali.

Home Giansante Gabriele (c) 1999-2006