sourCEntral - mobile manpages

pdf

SIGRETURN

BEZEICHNUNG

sigreturn, rt_sigreturn − Rückkehr vom Signal−Handler und Aufräumen des Stacks

ÜBERSICHT

int sigreturn(…);

BESCHREIBUNG

Wenn der Linux−Kernel feststellt, dass ein unblockiertes Signal in der Warteschlange für einen Prozess ist, werden verschiedene Teile des Prozesskontextes (Status−Wort des Prozessors, Register, Signalmaske und Einstellungen des Signalstacks) im Stack des Benutzerraums gespeichert, sobald der nächste Übergang dieses Prozesses zurück in den Benutzerraum stattfindet. Dies kann beispielsweise der Fall sein bei der Rückkehr aus einem Systemaufruf oder wenn der Prozess für die CPU neu geplant wird.

Der Kernel sorgt auch dafür, dass während des Übergangs in den Benutzerraum der Signal−Handler aufgerufen wird und dass nach der Rückkehr aus dem Handler die Steuerung an ein Codestück im Benutzerraum abgegeben wird, der häufig »Signaltrampolin« genannt wird. Der Signaltrampolincode ruft dann wiederum sigreturn() auf.

Dieser Aufruf von sigreturn() macht alle Aktionen für den Aufruf des Signal Handlers – die Änderung der Signalmaske des Prozesses, Umschalten der Signal−Stacks (siehe sigaltstack(2)) – rückgängig. Er stellt die Signalmaske des Prozesses wieder her, schaltet die Stacks um und stellt den Prozesskontext (Prozessorschalter und −register, darunter den Stack−Zeiger und den Instruktions−Zeiger) wieder her, so dass die Ausführung des Prozesses an dem Punkt fortgesetzt wird, wo er von dem Signal unterbrochen wurde.

RÜCKGABEWERT

sigreturn() kehrt nie zurück.

KONFORM ZU

Viele UNIX−artige Systeme haben einen Systemaufruf sigreturn() oder etwas nah verwandtes. Allerdings wird dieser Aufruf nicht in POSIX spezifiziert und die Details seines Verhaltens unterscheiden sich von System zu System.

ANMERKUNGEN

sigreturn() existiert nur, um Signal−Handler für den Kernel zu implementieren. Es sollte niemals direkt aufgerufen werden. Details der an sigreturn() übergebenen Argumente (falls vorhanden) variieren abhängig von der Architektur.

Früher platzierten UNIX−Systeme den Signaltrampolincode in dem Benutzerstack. Heutzutage sind die Seiten des Benutzer−Stacks so geschützt, dass Code−Ausführung verweigert wird. Daher befindet sich der Signaltrampolincode auf aktuellen Linux−Systemen, abhängig von der Architektur, entweder im vdso(7) oder in der C−Bibliothek. In letzterem Falle stellt die C−Bibliothek den Ort des Trampolins mit dem Feld sa_restorer der Struktur sigaction, die an sigaction(2) übergeben wird, bereit, und setzt den Schalter SA_RESTORER im Feld sa_flags.

Die gespeicherte Prozesskontextinformation wird in einer Struktur ucontext_t (siehe <sys/ucontext.h>) abgelegt. Diese Struktur ist innerhalb des Signal−Handlers als drittes Argument eines Handlers, der mit dem Schalter SA_SIGINFO etabliert wurde, sichtbar.

Auf einigen anderen UNIX−Systemen unterscheidet sich die Aktion des Signaltrampolins ein bisschen. Insbesondere übergibt der Kernel auf einigen Systemen die Steuerung bei der Rückkehr in den Benutzerraummodus an das Trampolin (statt an den Signal−Handler) und der Trampolincode ruft den Signal−Handler auf (und ruft dann sigreturn() auf, sobald der Handler zurückkehrt).

Unterschiede C−Bibliothek/Kernel
Der ursprüngliche Systemaufruf hieß sigreturn(). Mit der Hinzunahme von Echtzeitsignalen in Linux 2.2 wurde allerdings ein neuer Systemaufruf rt_sigreturn() zur Unterstützung eines vergrößerten Typs sigset_t hinzugefügt. Die GNU−C−Bibliothek versteckt diese Details und setzt rt_sigreturn() transparent ein, wenn der Kernel dies bereitstellt.

SIEHE AUCH

kill(2), restart_syscall(2), sigaltstack(2), signal(2), getcontext(3), signal(7), vdso(7)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.12 des Projekts Linux−man−pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man−pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von René Tschirley <gremlin AT cs DOT tu-berlin DOT de>, Martin Schulze <joey AT infodrom DOT org>, Martin Eberhard Schauer <Martin DOT E DOT Schauer AT gmx DOT de>, Mario Blättermann <mario DOT blaettermann AT gmail DOT com>, Helge Kreutzmann <debian AT helgefjell DOT de> und Dr. Tobias Quathamer <toddy AT debian DOT org> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german AT lists DOT debian DOT org>.

pdf