Pascal BEAUSSART

trap


La commande trap permet de spécifier une action à faire quand un signal ou une condition affectent le programme. L'ensemble des signaux disponibles sur votre système peuvent être listés par la commande kill -l.
Par exemple : HUP(1) QUIT(3) KILL(9) TERM(15) et bien d'autres.

Exemple : HUP et EXIT dialogue Réponse
# programme essai
function hangup {
  (( i == 2)) && exit
  (( i+=1 ))
  echo "Pour quitter faire 'kill -9 $$'"
}
function msg_fin {
  echo "shell terminé après $i tentatives"
}
trap hangup HUP ; trap msg_fin EXIT
typeset -i i=0
while (( 1 ))
do  :  # commande nop (deux-points)
done
essai &
kill -1 12345
kill -HUP %1
kill -1 12345





essai &
kill -1 23456
kill -9 23456
[1]   12345
Pour quitter faire 'kill -9 12345'
Pour quitter faire 'kill -9 12345'
shell terminé après 2 tentatives

[1] + 12345   Killed      essai &



[1]   23456
Pour quitter faire 'kill -9 12345'
kill -9 23456

[1] + 23456   Killed      essai &
Les signaux USR1 (30) et USR2 (31) sont disponibles aux utilisateurs car non utilisés par le système d'exploitation.

trap - signal supprime le trap sur un signal.

L'utilisation du trap sur la condition de DEBUG permet d'exécuter une fonction à chaque lignes de commandes. Ci-après l'affichage de la variable i :

i=5
trap 'echo $i' DEBUG
set -x


((i+=$RANDOM))


set +x

trap - DEBUG 

# création de la variable i égale à 5
# création du trap DEBUG
# passage en mode xtrace
+ echo 5
5
+ let i+=15009
+ echo 15014
15014
# sortir du mode xtrace
5
# suppression du trap DEBUG 

[RETOUR] [HOME]