Betriebssystem Linux
Signalverarbeitung im Shellscript
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 doneJetzt 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 doneWenn wir dieses Script jetzt laufen lassen und von einem anderen Terminal aus, dem laufenden Script mit
kill -10 PIDdas 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.
[ Kurs Hauptseite ] [ Linux-Kurse ] [ Startseite Linux-Praxis ] © 1999, 2000, 2001 by F. Kalhammer