.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2008, 2014, Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Created Sat Aug 21 1995 Thomas K. Dyas .\" Modified Tue Oct 22 22:09:03 1996 by Eric S. Raymond .\" 2008-06-26, mtk, added some more detail on the work done by sigreturn() .\" 2014-12-05, mtk, rewrote all of the rest of the original page .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SIGRETURN 2 "15. September 2017" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG sigreturn, rt_sigreturn \- Rückkehr vom Signal\-Handler und Aufräumen des Stacks .SH ÜBERSICHT \fBint sigreturn(…);\fP .SH BESCHREIBUNG .\" See arch/x86/kernel/signal.c::__setup_frame() [in 3.17 source code] If the Linux kernel determines that an unblocked signal is pending for a process, then, at the next transition back to user mode in that process (e.g., upon return from a system call or when the process is rescheduled onto the CPU), it creates a new frame on the user\-space stack where it saves various pieces of process context (processor status word, registers, signal mask, and signal stack settings). .PP 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 \fBsigreturn\fP() auf. .PP Dieser Aufruf von \fBsigreturn\fP() macht alle Aktionen für den Aufruf des Signal Handlers \(en die Änderung der Signalmaske des Prozesses, Umschalten der Signal\-Stacks (siehe \fBsigaltstack\fP(2)) \(en rückgängig. Mittels der Informationen, die früher auf dem Benutzer\-Stack gespeichert wurden, stellt \fBsigreturn\fP() 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. .SH RÜCKGABEWERT \fBsigreturn\fP() kehrt nie zurück. .SH "KONFORM ZU" Viele UNIX\-artige Systeme haben einen Systemaufruf \fBsigreturn\fP() oder etwas nah verwandtes. Allerdings wird dieser Aufruf nicht in POSIX spezifiziert und die Details seines Verhaltens unterscheiden sich von System zu System. .SH ANMERKUNGEN .\" See sysdeps/unix/sysv/linux/sigreturn.c and .\" signal/sigreturn.c in the glibc source \fBsigreturn\fP() exists only to allow the implementation of signal handlers. It should \fBnever\fP be called directly. (Indeed, a simple \fBsigreturn\fP() wrapper in the GNU C library simply returns \-1, with \fIerrno\fP set to \fBENOSYS\fP.) Details of the arguments (if any) passed to \fBsigreturn\fP() vary depending on the architecture. (On some architectures, such as x86\-64, \fBsigreturn\fP() takes no arguments, since all of the information that it requires is available in the stack frame that was previously created by the kernel on the user\-space stack.) .PP .\" See, for example, sysdeps/unix/sysv/linux/i386/sigaction.c and .\" sysdeps/unix/sysv/linux/x86_64/sigaction.c in the glibc (2.20) source. 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 \fBvdso\fP(7) oder in der C\-Bibliothek. In letzterem Falle informiert die Wrapperfunktion \fBsigaction\fP(2) der C\-Bibliothek den Kernel über den Ort des Trampolincodes, indem es dessen Adresse in dem Feld \fIsa_restorer\fP der Struktur \fIsigaction\fP ablegt und den Schalter \fBSA_RESTORER\fP im Feld \fIsa_flags\fP setzt. .PP Die gespeicherte Prozesskontextinformation wird in einer Struktur \fIucontext_t\fP (siehe \fI\fP) abgelegt. Diese Struktur ist innerhalb des Signal\-Handlers als drittes Argument eines Handlers, der über \fBsigaction\fP(2) mit dem Schalter \fBSA_SIGINFO\fP etabliert wurde, sichtbar. .PP .\" 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 \fBsigreturn\fP() auf, sobald der Handler zurückkehrt). .SS "Unterschiede C\-Bibliothek/Kernel" .\" Der ursprüngliche Systemaufruf hieß \fBsigreturn\fP(). Mit der Hinzunahme von Echtzeitsignalen in Linux 2.2 wurde allerdings ein neuer Systemaufruf \fBrt_sigreturn\fP() zur Unterstützung eines vergrößerten Typs \fIsigset_t\fP hinzugefügt. Die GNU\-C\-Bibliothek versteckt diese Details und setzt \fBrt_sigreturn\fP() transparent ein, wenn der Kernel dies bereitstellt. .SH "SIEHE AUCH" \fBkill\fP(2), \fBrestart_syscall\fP(2), \fBsigaltstack\fP(2), \fBsignal\fP(2), \fBgetcontext\fP(3), \fBsignal\fP(7), \fBvdso\fP(7) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 4.16 des Projekts Linux\-\fIman\-pages\fP. 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/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze , René Tschirley , Martin Eberhard Schauer , Mario Blättermann , Dr. Tobias Quathamer und Helge Kreutzmann 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 .