42 votes

Identification du nom du signal reçu dans Bash

Lorsqu'un signal est reçu, je peux exécuter certaines commandes en utilisant trap. Exemple :

trap 'echo hello world' 1 2

Si l'un des signaux spécifiés est reçu, le message hello world' s'affiche.

Mais comment puis-je imprimer/identifier le nom du signal reçu ?

15voto

Phil Points 345

Dans le piège (lorsqu'il est déclenché via un signal), la variable $ ? est initialement définie sur le numéro de signal plus 128, de sorte que vous pouvez attribuer le numéro de signal à une variable en faisant la première instruction de l'action du piège à quelque chose comme

sig=$(($? - 128))

Vous pouvez ensuite obtenir le nom du signal en utilisant la commande kill

kill -l $sig

7voto

une façon simple de le faire :

_handler() {
   signal=$1
   echo signal was $signal
 }

 trap '_handler SIGTERM' SIGTERM
 trap '_handler SIGINT'  SIGINT

7voto

Brian White Points 124
for s in {1..64} ;do trap "echo trap $s" $s ;done

Ou sans bash-ismes

s=1 ;while [ $s -le 64 ] ;do trap "echo trap $s" $s ;s=$((s+1)) ;done

Définit 64 pièges individuels, un pour chaque signal possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X