trap 'Kommandoliste' Signale
Ausführen der Kommandoliste, wenn eins der angegebenen Signale an den Prozeß
(= Shell) gesendet wird. Die Signale werden in Form der Signalnummern oder überihre Namen (SIGKILL, SIGHUP, ...), getrennt durch Leerzeichen aufgeführt. Ist die Kommandoliste leer, werden die entsprechenden Signale abgeschaltet. Bei einfachen Kommandos reichen oft auch die Anführungszeichen, um die Shell-Ersetzung zu verhindern. Signale sind eine Möglichkeit, wie verschiedenen Prozesse, also gerade laufendeProgramme, miteinander kommunizieren können. Ein Prozeß kann einem anderenProzeß ein Signal senden (der Betriebssystemkern spielt dabei den Postboten).
Der Empfängerprozeß reagiert auf das Signal, z. B. dadurch, daß er
sich beendet. Der Prozeß kann das Signal auch ignorieren. Das ist beispielsweise
nützlich, wenn ein Shellskript nicht durch den Benutzer von der Tastatur aus
abgebrochen werden soll. Mit dem trap-Kommando kann man festlegen, mit welchen
Kommandos auf ein Signal reagiert werden soll bzw. ob überhaupt reagiert werden soll.
Neben anderen können folgende Signalnummern verwendet werden:
0 | SIGKILL | Terminate (beim Beenden der shell) |
1 | SIGHUP | Hangup (beim Beenden der Verbindung zum Terminal oder Modem) |
2 | SIGINT | Interrupt (wie Ctrl-C-Taste am Terminal) |
3 | SIGQUIT | Abbrechen (Beenden von der Tastatur aus) |
9 | SIGKILL | Kann nicht abgefangen werden - Beendet immer den empfangenden Prozeß |
15 | SIGTERM | Terminate (Software-Terminate, Voreinstellung) |
Die Datei /usr/include/Signal.h enthält eine Liste aller Signale.
Beispiele:
# Skript sperren gegen Benutzerunterbrechung:
trap "" 2 3
oder auch
# Skript sauber beenden
trap 'rm tmpfile; cp foo fileb; exit' 0 2 3 15
Bitte nicht das exit-Kommando am Schluss vergessen, sonst wird das Skript nicht
beendet. Wiedereinschalten der Signale erfolgt durch trap [Signale].
Ein letztes Beispiel zu trap:
# Automatisches Ausführen des Shellskripts .logoff beim
# Ausloggen durch den folgenden Eintrag in .profile:
trap .logoff 0
|