Keybiard trap

Disabilitare la combinazione di tasti Control + C  (o CTRL-C, o in qualsiasi altro modo si voglia chiamare) può essere davvero utile, specialmente se si voglia impedire all’utente finale di interrompere un particolare programma, batch o script su sistemi operativi Linux like. Quello che è necessario è il semplice ausilio del comando traptramite il quale è possibile dis/abilitare le combinazioni di tasti (come Control-C per l’appunto) che utilizzano dei segnali chiamati interrupt e gestiti direttamente a basso livello.

L’elenco di questi segnali è consultabile lanciando il comando con il parametro -l:

[cc lang=”bash”]

root@bt:~# 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
16) SIGSTKFLT 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 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+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

root@bt:~#[/CC]

Il segnale in questo caso è il numero 2 SIGINT. Per impedire, o forse è meglio dire per intercettare tale segnale, è possibile specificare a linea di comando:

[cc lang=”bash”]

trap ” 2

[/cc]

Da notare che tra il comando trap ed il valore 2, ma avremmo potuto benissimo usare la nomenclatura sopracitata, sono stati interposte due apici, che posizionalmente rappresenterebbero il parametro args del comando, che è opzionale. Specificando le apici (cioè una stringa nulla) diremo al comando di ignorare il SIGSPEC di ritorno, oppure potremmo per esempio includere un messaggio di questo tipo:

[cc lang=”bash”]

trap “echo il segnale SIGINT e\’ stato intercettato” 2

[/cc]

Si noti l’utilizzo del backslah ‘\’ prima dell’accento del verbo per evitare che la stringa venga troncata.