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.