RESTART_SYSCALL(2) Manuel du programmeur Linux RESTART_SYSCALL(2)

restart_syscall - Redémarrer un appel système après qu'il a été interrompu par un signal d'arrêt

long restart_syscall(void);

Note : il n'existe pas d'enveloppe pour cet appel système dans la glibc ; voir NOTES.

L'appel système restart_syscall() est utilisé pour redémarrer certains appels système lorsqu'un processus qui a été arrêté par un signal (par exemple SIGSTOP ou SIGTSTP) est ensuite relancé par un signal SIGCONT. Cet appel système est exclusivement destiné à un usage interne par le noyau.

restart_syscall() est utilisé pour redémarrer uniquement les appels système qui, lorsqu'ils sont redémarrés, doivent ajuster leurs paramètres temporels — c'est-à-dire poll(2) (à partir de Linux 2.6.24), nanosleep(2) (à partir de Linux 2.6), clock_nanosleep(2) (à partir de Linux 2.6) et futex(2), lorsqu'il est utilisé avec les opérations FUTEX_WAIT (à partir de 2.6.22) et FUTEX_WAIT_BITSET (à partir de Linux 2.6.31). restart_syscall() redémarre l'appel système interrompu avec un paramètre de temps ajusté pour prendre en compte le temps écoulé (comprenant le temps d’arrêt du processus par le signal). Sans le mécanisme restart_syscall(), l'estimation du temps écoulé pourrait ne pas être correctement effectuée lors du redémarrage de ces appels système.

La valeur renvoyée par restart_syscall() est celle renvoyée par l'appel système qui est redémarré.

errno est défini selon l'erreur avec la même valeur que celle définie par l'appel système qui est redémarré par restart_syscall().

L'appel système restart_syscall() existe depuis Linux 2.6.

Cet appel système est spécifique à Linux.

Il n'y a pas d'enrobage glibc pour cet appel système puisqu'il ne doit être appelé que par le noyau et jamais par une application.

Le noyau utilise restart_syscall() pour s'assurer que quand un appel redémarre après que le processus ait été arrêté par un signal puis réveillé par un SIGCONT, le temps que le processus a passé arrêté soit pris en compte dans l'intervalle du délai indiqué dans l'appel système d'origine. Pour les appels système qui prennent un paramètre de délai et redémarrent automatiquement après un signal d'arrêt et un SIGCONT, sans avoir construit le mécanisme restart_syscall(), après la reprise de l'exécution du processus, le temps passé à l'arrêt par le processus n'est pas pris en compte dans la valeur de délai. Parmi les exemples remarquables d'appels système souffrant de ce problème, on trouve ppoll(2), select(2) et pselect(2).

Depuis l'espace utilisateur, l'exécution de restart_syscall(2) est pratiquement transparente : du point de vue du processus auteur de l'appel système qui est redémarré, tout se passe comme si l'appel système s'exécutait et se relançait de façon habituelle.

sigaction(2), sigreturn(2), signal(7)

Cette page fait partie de la publication 5.13 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

La traduction française de cette page de manuel a été créée par Christophe Blaess https://www.blaess.fr/christophe/, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

22 mars 2021 Linux