Natürlich können Shellscripts auch auf Signale reagieren. Mit dem Befehl trap können bestimmte Signale mit bestimmten Befehlen verbunden werden. Jedesmal, wenn das Script ein bestimmtes Signal auffängt, wird dann der entsprechende Befehl ausgeführt.

trap "Befehl1; Befehl2;..." Signalliste

Um bestimmte Signale ganz zu ignorieren, etwa die Signale zum Programmabbruch (0,1,2,3,15) kann trap einfach mit einer leeren Anweisung diese Signale abfangen:

trap "" 0 1 2 3 15

Beispiel:

Wir schreiben ein Script, das von 0 bis 65535 zählt, damit das nicht zu schnell geht warten wir nach jeder Zahl eine Sekunde. Das würde dann ungefähr so aussehen:

#!/bin/bash
i=0
while [ i -le 65535 ]
do
  echo $i
  let i=$i+1
  sleep 1
done

Jetzt modifizieren wir das Programm so, dass es jedesmal, wenn es das Signal USR1 (10) bekommt, wieder von vorne anfängt.

#!/bin/bash
trap "i=0" 10
i=0
while [ i -le 65535 ]
do
  echo $i
  let i=$i+1
  sleep 1
done     

Wenn wir dieses Script jetzt laufen lassen und von einem anderen Terminal aus, dem laufenden Script mit

kill -10 PID

das Signal 10 schicken, wird dieses Signal vom trap-Befehl abgefangen und der Befehl i=0 ausgeführt. Der Effekt ist sofort sichtbar, unser Programm fängt wieder von vorne zu zählen an.

Schreibe einen Kommentar