restart_syscall(2) System Calls Manual restart_syscall(2) BEZEICHNUNG restart_syscall - Neustart eines Systemaufrufs nach einer Unterbrechung durch ein Stopp-Signal UBERSICHT long restart_syscall(void); Hinweis: Es gibt keinen Glibc-Wrapper fur diesen Systemaufruf; siehe ANMERKUNGEN. BESCHREIBUNG Der Systemaufruf restart_syscall() wird zum Neustart bestimmter Systemaufrufe verwandt, nachdem ein Prozess, der durch ein Stopp-Signal (z.B. SIGSTOP oder SIGTSTP) gestoppt wurde spater nach Empfang eines Signals SIGCONT wiederaufgenommen wird. Dieser Systemaufruf ist nur zur Kernel-internen Verwendung entwickelt worden. restart_syscall() wird nur zum Neustart solcher Systemaufrufe verwandt, die beim Neustart ihre Zeit-bezogenen Parameter anpassen sollen - konkret poll(2) (seit Linux 2.6.24), nanosleep(2) (seit Linux 2.6), clock_nanosleep(2) (seit Linux 2.6) und futex(2), wenn mit den Aktionen FUTEX_WAIT (seit Linux 2.6.22) und FUTEX_WAIT_BITSET (seit Linux 2.6.31) eingesetzt. restart_syscall() startet die unterbrochenen Systemaufrufe mit einem Zeitargument neu, das geeignet angepasst ist, um die Zeit zu berucksichtigen, die bereits abgelaufen ist (einschliesslich der Zeit, die der Prozess durch ein Signal unterbrochen war). Ohne den Mechanismus restart_syscall() wurde der Neustart dieser Systemaufrufe die bereits abgelaufene Zeit nicht korrekt ableiten, wenn der Prozess mit der Ausfuhrung fortfahren wurde. RUCKGABEWERT Der Ruckgabewert von restart_syscall() ist der Ruckgabewert des jeweiligen neugestarteten Systemaufrufs. FEHLER errno wird gemass des Fehlers des jeweils durch restart_syscall() neugestarten Systemaufrufs gesetzt. STANDARDS Linux. GESCHICHTE Linux 2.6. ANMERKUNGEN Fur diesen Systemaufruf gibt es keinen Glibc-Wrapper, da er nur zur Verwendung durch den Kernel gedacht ist und niemals von Anwendungen aufgerufen werden sollte. Der Kernel verwendet restart_syscall() um sicherzustellen, dass die Zeit, die der Prozess in dem gestoppten Zustand verbrachte, gegen das im ursprunglichen Systemaufruf festgelegte Zeituberschreitungsintervall zahlt, wenn ein Systemaufruf neu gestartet wird, nachdem ein Prozess durch ein Signal gestoppt und dann durch SIGCONT wiederaufgenommen wurde. Fur Systemaufrufe, die ein Zeituberschreitungsargument akzeptieren und sich automatisch nach einem Stopp-Signal mit SIGCONT neu starten, bei denen aber der Mechanismus restart_syscall() nicht eingebaut ist, wird nach Wiederaufnahme der Prozessausfuhrung die Zeit, die der Prozess in dem Stoppzustand verbrachte, nicht gegen den Zeituberschreitungswert gezahlt. Bekannte Beispiele fur Systemaufrufe, die unter diesem Problem leiden, sind ppoll(2), select(2) und pselect(2). Aus dem Anwendungsraum ist die Aktion von restart_syscall() grosstenteils unsichtbar: gegenuber dem Prozess, der den neuzustartenden Systemaufruf durchfuhrte, erscheint es so, als ob der Systemaufruf ganz normal ausgefuhrt wurde und zuruckkehrte. SIEHE AUCH sigaction(2), sigreturn(2), signal(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von 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.9.1 2. Mai 2024 restart_syscall(2)