Aller au contenu

La gestion des signaux#


Réception de signaux#

La commande trap permet de spécifier le comportement du shell à la réception d'un signal (indiqué par son nom ou son numéro).

Syntaxe#

trap handler nsig1 nsig2
  • A la réception d'un signal la commande handler est exécutée
  • Puis le shell reprend sont exécution au point de réception du signal.
  • Dans le cas de reception simultané de plusieurs signaux le korn shell exécute les handler dans l'odre défini par les numéros de signaux.

Réception de signaux (2)#

Exemple#

# Ignorer les signaux intr (2) et quit (3)
trap "" 2 3

Retour au comportement par défaut#

Syntaxe#

trap - sig

Note: la gestion des signaux est hierarchique dans Unix (= signaux passés de pere en fils). Si un signal était ignoré par le shell a son lancement il n'est plus possible de positioner un handler sur se signal!


Fin de programme#

On peut détecter la fin d'un script avec:

trap handler EXIT

la commande handler est réalisé a la fin du script quelle que soit la raison de terminaison (excepté SIGKILL).

Note: Si le trap est défini dans une fonction le handler est exécuté a la fin de la fonction.

📘 Putorius: Using Trap to Exit Bash Scripts Cleanly


Signaux spéciaux#

En plus des signaux Unix (POSIX), le korn shell introduit des signaux spéciaux:

  • DEBUG le handler est exécuté après chaque commande
  • ERR le handler est exécuter après chaque commande de code de retour non nul.

trap sans argument affiche la liste des handler associés a chaque signal


Le signal 1 (HUP) de fin de session#

Le shell propriétaire d'une session envoie quand il meurt un signal 1 à tous les processus de la session afin que vous soyez délogé proprement. Mais si vous voulez lancer un processus qui doit tourner pendant votre absence il faut utiliser la commande nohup .

nohup commande

Ainsi le processus créé ignore le signal SIGHUP de fin de session.

Il est également possible pour un script de se protéger avec

trap "" 1.