restart_syscall(2) | System Calls Manual | restart_syscall(2) |
BEZEICHNUNG
restart_syscall - Neustart eines Systemaufrufs nach einer Unterbrechung durch ein Stopp-Signal
ÜBERSICHT
long restart_syscall(void);
Hinweis: Es gibt keinen Glibc-Wrapper für 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 später 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 berücksichtigen, die bereits abgelaufen ist (einschließlich der Zeit, die der Prozess durch ein Signal unterbrochen war). Ohne den Mechanismus restart_syscall() würde der Neustart dieser Systemaufrufe die bereits abgelaufene Zeit nicht korrekt ableiten, wenn der Prozess mit der Ausführung fortfahren würde.
RÜCKGABEWERT
Der Rückgabewert von restart_syscall() ist der Rückgabewert des jeweiligen neugestarteten Systemaufrufs.
FEHLER
errno wird gemäß des Fehlers des jeweils durch restart_syscall() neugestarten Systemaufrufs gesetzt.
STANDARDS
Linux.
GESCHICHTE
Linux 2.6.
ANMERKUNGEN
Für 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 ursprünglichen Systemaufruf festgelegte Zeitüberschreitungsintervall zählt, wenn ein Systemaufruf neu gestartet wird, nachdem ein Prozess durch ein Signal gestoppt und dann durch SIGCONT wiederaufgenommen wurde. Für Systemaufrufe, die ein Zeitüberschreitungsargument 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 Prozessausführung die Zeit, die der Prozess in dem Stoppzustand verbrachte, nicht gegen den Zeitüberschreitungswert gezählt. Bekannte Beispiele für Systemaufrufe, die unter diesem Problem leiden, sind ppoll(2), select(2) und pselect(2).
Aus dem Anwendungsraum ist die Aktion von restart_syscall() größtenteils unsichtbar: gegenüber dem Prozess, der den neuzustartenden Systemaufruf durchführte, erscheint es so, als ob der Systemaufruf ganz normal ausgeführt wurde und zurückkehrte.
SIEHE AUCH
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> 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 die Mailingliste der Übersetzer.
2. Mai 2024 | Linux man-pages 6.9.1 |