bionic (2) sigreturn.2.gz

Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

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

ÜBERSICHT

       int sigreturn(…);

BESCHREIBUNG

       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).

       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. Mittels  der
       Informationen,  die  früher auf dem Benutzer-Stack gespeichert wurden, stellt sigreturn() 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()  exists only to allow the implementation of  signal  handlers.  It  should  never  be  called
       directly. (Indeed, a simple sigreturn() wrapper in the GNU C library simply returns -1, with errno set to
       ENOSYS.) Details of the arguments (if any) passed to sigreturn() vary depending on the architecture.  (On
       some architectures, such as x86-64, sigreturn()  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.)

       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 informiert die Wrapperfunktion sigaction(2) der C-Bibliothek  den
       Kernel  über  den  Ort  des  Trampolincodes, indem es dessen Adresse in dem Feld sa_restorer der Struktur
       sigaction ablegt und den Schalter SA_RESTORER im Feld sa_flags setzt.

       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 über
       sigaction(2) 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.15  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@cs.tu-berlin.de>,  Martin
       Schulze   <joey@infodrom.org>,  Martin  Eberhard  Schauer  <Martin.E.Schauer@gmx.de>,  Mario  Blättermann
       <mario.blaettermann@gmail.com>,  Helge  Kreutzmann  <debian@helgefjell.de>  und  Dr.   Tobias   Quathamer
       <toddy@debian.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@lists.debian.org>.