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 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)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Cédric Boutillier <
[email protected]>,
Frédéric Hantrais <
[email protected]> et Jean-Philippe
MENGUAL <
[email protected]>
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 à
[email protected]