Sobes.tech
Senior

Welche Signale des Betriebssystems können abgefangen werden und welche nicht?

sobes.tech KI

Antwort von AI

In Unix-ähnlichen Betriebssystemen (Linux, macOS) können Signale in abfangbare und nicht abfangbare Signale unterteilt werden.

Abfangbare Signale sind solche, für die der Prozess einen Handler (Signal-Handler) setzen kann. Zum Beispiel:

  • SIGINT (Unterbrechung, normalerweise Ctrl+C)
  • SIGTERM (Anfrage zur Beendigung)
  • SIGHUP (Terminal-Neuladung)
  • SIGUSR1, SIGUSR2 (Benutzersignale)

Nicht abfangbare Signale sind Signale, die nicht abgefangen oder ignoriert werden können, da sie dazu bestimmt sind, den Prozess sofort zu beenden oder kritische Situationen zu behandeln:

  • SIGKILL (sofortiges Beenden des Prozesses)
  • SIGSTOP (Prozess anhalten)

Beispiel in Go zum Abfangen von SIGINT:

import (
    "os"
    "os/signal"
    "syscall"
    "fmt"
)

func main() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        sig := <-sigs
        fmt.Println("Signal empfangen:", sig)
        // Signalbehandlung
        os.Exit(0)
    }()

    select {} // Warten auf Signal
}

Auf diese Weise können die meisten Signale abgefangen werden, außer SIGKILL und SIGSTOP, die vom Betriebssystem zwangsweise behandelt werden.