Signalbehandlung
Version vom 17. Oktober 2025, 17:01 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Signalbehandlung = *Mit der Signalbehandlung kann ein Bash-Skript auf externe Ereignisse reagieren, wie z. B. das Beenden eines Prozesses oder das Drücke…“)
Signalbehandlung
- Mit der Signalbehandlung kann ein Bash-Skript auf externe Ereignisse reagieren, wie z. B. das Beenden eines Prozesses oder das Drücken von Strg+C.*
- Signale werden vom Kernel an Prozesse gesendet und können von der Shell abgefangen werden.*
Grundprinzip
- Jedes Signal hat eine eindeutige Nummer und einen Namen (z. B. SIGINT, SIGTERM).
- Mit dem Kommando trap kann ein Skript definieren, welche Aktion bei Eintreffen eines Signals ausgeführt werden soll.
- Damit lassen sich Skripte kontrolliert beenden, auf Interrupts reagieren oder Aufräumarbeiten durchführen.
Syntax
- trap 'Befehle' SIGNAL1 SIGNAL2 ...
Beispiel – Strg+C abfangen
#!/bin/bash
trap 'echo "Abbruch durch Benutzer"; exit 1' SIGINT
while true; do
echo "Laufe endlos, Strg+C zum Abbrechen..."
sleep 2
done
Ausgabe (bei Strg+C): Laufe endlos, Strg+C zum Abbrechen... Abbruch durch Benutzer
Beispiel – mehrere Signale behandeln
#!/bin/bash
cleanup() {
echo "Aufräumen..."
rm -f /tmp/tempfile
exit 0
}
trap cleanup SIGINT SIGTERM
touch /tmp/tempfile
echo "Tempfile erstellt: /tmp/tempfile"
while true; do
sleep 1
done
Ausgabe bei SIGINT oder SIGTERM: Tempfile erstellt: /tmp/tempfile Aufräumen...
Hinweise
- trap ermöglicht es, beliebige Befehle bei Eintreffen eines Signals auszuführen.
- Typische Signale:
- SIGINT – Interrupt (Strg+C)
- SIGTERM – Terminate
- SIGHUP – Hangup
- SIGKILL – Kill (nicht abfangbar)
- Unbehandelte Signale führen zur Standardaktion (oft Beenden des Prozesses).
Aufgaben
- Schreiben Sie ein Skript, das auf Strg+C reagiert und eine Nachricht ausgibt.
- Erstellen Sie ein Skript, das beim Beenden (SIGTERM) eine Aufräumfunktion ausführt.
- Testen Sie, welche Signale abgefangen werden können und welche nicht.