Catturare i segnali in uno script bash

A volte puó essere necessario effettuare alcune operazioni prima che uno script muoia quando stiamo spegnendo il computer oppure quando gli inviamo un kill a mano

Per gestire questi comportamenti si puó usare il comando trap.
la sinossi é:
trap [-lp] [[arg] sigspec …]

In pratica il modo piú facile per usarlo é:

function at_SIGTERM
{
    echo "ho ricevuto un segnale di tipo TERM"
    rm /tmp/trap_test.pid
    exit
}


function at_SIGKILL
{
    echo "ho ricevuto un segnale di tipo KILL"
    rm /tmp/trap_test.pid
    exit
}

trap at_SIGTERM SIGTERM
trap at_SIGKILL SIGKILL

if [[ -f /tmp/trap_test.pid  ]]
then
   echo "oh, sono gia' attivo!!!!"
   exit
fi
echo "Ciao, sono il PID $$ "
echo "$$" > /tmp/trap_test.pid
while true
do
   echo "Dormo 20"
   sleep 20
done

Per testarne il funzionamento scriviamo su un file lo script qui sopra e lanciamolo

cat > test.bash
[incolla il testo]
^D
bash test.bash

adesso apriamo un altro terminale e inviamo un SIGTERM allo script

# kill -15 `cat /tmp/trap_test.pid`

nell’altra shell dovremmo trovarci la scritta “ho ricevuto un segnale di tipo TERM” e il prompt pronto, segno del termine del processo. Riavviamo il processo per provare il SIGKILL.

# kill -9 `cat /tmp/trap_test.pid`

ops.. non funziona!!! infatti non é possibile fare il trap del sigkill.
alla prossima esecuzione lo script dará errore perché il pidfile nella directory /tmp é giá esistente.

Se riesco a trovare un metodo per trappare anche il sigkill vi avviso, se riuscite a trovare un modo per trappare il sigkill avvisatemi, ma fino ad allora.. ocio a come killate i processi!

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: