IMC!


Contenuti


Foto

 







Curiosando...
Novita  Novità Link  Link Blog  Blog English  Español 
11 - Segnali di sistema nella bash

 | 

Un segnale � una specie di "messaggio" che una programma pu� mandare a un altro programma; un esempio di segnale pu� essere la pressione della combinazione di tasti CTRL + C, che genera un segnale INT, che di solito interrompe l'esecuzione dello script.
Mascherare un segnale in uno script significa dunque associare a tale segnale una funzione da eseguire quando questo segnale � ricevuto. Nella bash, i segnali di sistema possono essere mascherati tramite il comando trap, secondo la seguente sintassi:

trap nome_funzione nome_segnale

Vediamo un esempio:

#!/bin/bash

# Il seguente script mostra l'utilizzo della funzione trap.
# Nella funzione sono presenti tre conti alla rovescia a partire
# da 10 secondi. E' possibile provare a interrompere tali conteggi
# con CTRL-C (segnale INT) e verificare il comportamento dello
# script.
#
# Durante il primo conteggio, il segnale INT � mascherato con una
# funzione di errore: l'arrivo di questo segnale provoca la
# comparsa sullo schermo dell'errore.
#
# Successivamente, durante il secondo conteggio, il segnale INT viene
# diabilitato: la sua ricezione non provoca alcuna azione.
#
# Infine, durante il terzo conteggio, viene rimossa la maschera: � ora
# possibile interrompere il conteggio.

function errore
{
  echo "Mi spiace, non puoi puoi interrompere il conteggio"
  sleep 3
}

function conta
{
  for i in 10 9 8 7 6 5 4 3 2 1;
  do
    echo "Sono trascorsi: $i secondi"
    sleep 1
  done
}

# Programma principale

####### Conteggio 1

trap errore INT # Mascherazione del segnale con una funzione di errore
echo "Conteggio 1:"
conta
echo " "

####### Conteggio 2

trap '' INT # Disabilitazione del segnale
echo "Conteggio 2:"
conta
echo " "

####### Conteggio 3

trap - INT # Rimozione della maschera
echo "Conteggio 3:"
conta



 


 | 






Fatal error: Call to undefined function sqlite_open() in /membri/giacobbe85/include/commenti.inc.php on line 324