Signalbehandlung

Aus Xinux Wiki
Version vom 27. November 2025, 14:32 Uhr von Thomas.will (Diskussion | Beiträge) (→‎Signalbehandlung)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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.