sigreturn(2) System Calls Manual sigreturn(2) BEZEICHNUNG sigreturn, rt_sigreturn - Ruckkehr vom Signal-Handler und Aufraumen des Stack-Frames BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT int sigreturn(); BESCHREIBUNG Wenn der Linux-Kernel feststellt, dass ein unblockiertes Signal in der Warteschlange fur einen Prozess ist, wird ein neuer Frame auf dem Stack des Benutzerraums erstellt, wo verschiedene Teile des Prozesskontextes (Status-Wort des Prozessors, Register, Signalmaske und Einstellungen des Signalstacks) gespeichert werden, sobald der nachste Ubergang dieses Prozesses zuruck in den Benutzerraum stattfindet. Dies kann beispielsweise bei der Ruckkehr aus einem Systemaufruf oder wenn der Prozess fur die CPU neu geplant wird der Fall sein. Der Kernel sorgt auch dafur, dass wahrend des Ubergangs in den Benutzerraum der Signal-Handler aufgerufen wird und dass nach der Ruckkehr aus dem Handler die Steuerung an ein Codestuck im Benutzerraum abgegeben wird, der haufig >>Signaltrampolin<< genannt wird. Der Signaltrampolincode ruft dann wiederum sigreturn() auf. Dieser Aufruf von sigreturn() macht alle Aktionen fur den Aufruf des Signal Handlers - die Anderung der Signalmaske des Prozesses, Umschalten der Signal-Stacks (siehe sigaltstack(2)) - ruckgangig. Mittels der Informationen, die fruher 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 Ausfuhrung des Prozesses an dem Punkt fortgesetzt wird, wo er von dem Signal unterbrochen wurde. RUCKGABEWERT sigreturn() kehrt nie zuruck. VERSIONEN 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. STANDARDS Keine. ANMERKUNGEN sigreturn() existiert nur, um die Implementierung von Signal-Handlern zu erlauben. Es sollte niemals direkt aufgerufen werden. (Tatsachlich wird ein einfacher sigreturn()-Wrapper in der GNU-C-Bibliothek einfach -1 zuruckliefern und errno auf ENOSYS setzen.) Details der an sigreturn() ubergebenen Argumente (falls vorhanden) hangen von der Architektur ab. (Auf einigen Architekturen, wie X86-64, akzeptiert sigreturn() kein Argument, da alle Informationen, die es benotigt, auf dem Stack-Frame verfugbar ist, der vorher durch den Kenrel auf dem Stack des Benutzerraums erstellt wurde. Fruher platzierten UNIX-Systeme den Signaltrampolincode in dem Benutzerstack. Heutzutage sind die Seiten des Benutzer-Stacks so geschutzt, dass Code-Ausfuhrung verweigert wird. Daher befindet sich der Signaltrampolincode auf aktuellen Linux-Systemen, abhangig 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 uber 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 ) abgelegt. Diese Struktur ist innerhalb des Signal-Handlers als drittes Argument eines Handlers, der uber sigaction(2) mit dem Schalter SA_SIGINFO etabliert wurde, sichtbar. Auf einigen anderen UNIX-Systemen unterscheidet sich die Aktion des Signaltrampolins ein bisschen. Insbesondere ubergibt der Kernel auf einigen Systemen die Steuerung bei der Ruckkehr 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 zuruckkehrt). Unterschiede C-Bibliothek/Kernel Der ursprungliche Systemaufruf hiess sigreturn(). Mit der Hinzunahme von Echtzeitsignalen in Linux 2.2 wurde allerdings ein neuer Systemaufruf rt_sigreturn() zur Unterstutzung eines vergrosserten Typs sigset_t hinzugefugt. 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) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze , Rene Tschirley , Martin Eberhard Schauer , Mario Blattermann , Dr. Tobias Quathamer und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 sigreturn(2)