Abfangen von Signalen
Um das Skript vor vorschnellem Abbruch durch Signale zu schützen, müssen wir diese abfangen und behandeln. Unsere Reaktion wird beispielsweise sein, dass wir rasch alle temporären Dateien/Verzeichnisse löschen und anschließend das Skript verlassen. Bei den Signalen beschränken wir uns auf SIGINT (Nummer 2; Tastaturinterrupt) und SIGTERM (15). Ein trap-Aufruf zu Beginn unseres Skripts ist alles, was wir tun müssen.
#!/bin/sh trap 'test -e /tmp/etc$$ && rm -r /tmp/etc$$; exit 0' 2 15
Wann immer eines der beiden Signale (hier 2 und 15) auf den Prozess einherfällt, wird trap das temporäre Verzeichnis samt Inhalt entfernen (rm -r /tmp/etc$$) - falls es existiert (test -e /tmp/etc$$) - und das Skript beenden (exit 0).
Sie können trap ebenso verwenden, um bestimmte Signal zu ignorieren. Wählen Sie hierfür eine der beiden Syntaxvarianten:
trap "" 2 3 15 19 # Alternativ: trap : 2 3 15 19
Weitere Beispiele:
trap "echo SIGINT nicht erlaubt" INT trap "echo SIGTERM nicht erlaubt" TERM trap "echo SIGTSTP nicht erlaubt" TSTP
Um in einem Skript die Behandlung von Signalen wieder zuzulassen, ist ein Aufruf von trap ohne Argumente erforderlich.
Stand: 05.11.2009
EOF