
So funktionieren meiner Meinung nach Linux-Signale:
Jeder Prozess verfügt über einen Standardsignalhandler für jedes Signal. Bei manchen Signalen beendet der Standardsignalhandler den Prozess, während der Standardsignalhandler anderer Signale das Signal einfach ignoriert usw.
Die folgende Tabelle zeigt alle Aktionen, die ein Standardsignalhandler ausführen kann (diese Tabelle stammt aus diesemDokumentation):
Begriff Die Standardaktion besteht darin, den Prozess zu beenden.
Ign Die Standardaktion besteht darin, das Signal zu ignorieren.
Kern Die Standardaktion besteht darin, den Prozess zu beenden und einen Core-Dump auszuführen (siehe core(5)).
Stoppen Die Standardaktion besteht darin, den Vorgang zu stoppen.
Fortsetzung Die Standardaktion besteht darin, den Vorgang fortzusetzen, wenn er aktuell gestoppt ist.
Sie können den Standardsignalhandler durch Ihren eigenen Signalhandler ersetzen, indem SieSignal()(was meiner Meinung nach veraltet ist) odersigaction().
Habe ich soweit Recht?
Nun lautet meine Frage: Gibt es Signale, bei denen Sie den Standard-Signalhandler nicht überschreiben können?
Antwort1
In den beiden Manpages, auf die Sie verlinkt haben, werden die Signale erwähnt, deren Handler nicht überschrieben werden können.signal(2)
:
Die Signale
SIGKILL
undSIGSTOP
können nicht erfasst oder ignoriert werden.
In sigaction(2)
:
Zeichengibt das Signal an und kann jedes gültige Signal außer
SIGKILL
und seinSIGSTOP
.