sleep, nsleep ou usleep Sous-routine

Objectif

Interrompt l'exécution d'un processus en cours.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <unistd.h>
unsigned int sleep ( Seconds)
#include <sys/time.h>
int nsleep ( Rqtp Rmtp)
struct timestruc_t *Rqtp, *Rmtp;
int usleep ( Useconds)
useconds_t Useconds

Descriptif

Les sous-routines sleep, usleepou nsleep interrompent le processus en cours jusqu'à ce que:

  • L'intervalle de temps spécifié par le paramètre Secondes, Usecondsou Rqtp s'écoule.
  • Un signal est envoyé au processus appelant qui démarre une fonction d'interception de signal ou met fin au processus.
  • Le processus est notifié d'un événement via une fonction de notification d'événement.

Le temps de mise en suspens peut être supérieur au temps demandé en raison de la planification d'une autre activité par le système. A son retour, l'emplacement spécifié par le paramètre Rmtp est mis à jour pour afficher le temps restant dans l'intervalle, ou 0 si l'intervalle complet est écoulé.

Paramètres

Article Descriptif
Rqtp Intervalle de temps spécifié pour l'interruption de l'exécution.
Rmtp Indique que l'heure est laissée sur le temporisateur d'intervalle ou 0.
Secondes Indique l'intervalle de temps en secondes.
Usecondes Indique l'intervalle de temps en microsecondes. Ce paramètre est disponible uniquement pour la sous-routine usleep .

Interfaces de compatibilité

Les sous-routines sleep et usleep sont des formes simplifiées pour la sous-routine nsleep . Ces sous-routines garantissent la compatibilité avec les anciennes versions de l'interfacePOSIX(Portable Operating System Interface) et les spécifications Linux® . La sous-routine sleep interrompt le processus en cours pendant des secondes entières. La sous-routine usleep interrompt le processus en cours en microsecondes et la sous-routine nsleep interrompt le processus en cours en nanosecondes.

Dans AIX® version 5.1ou ultérieure, le temps est mesuré en nanosecondes. La sous-routine nsleep est l'appel système utilisé par le système d'exploitation AIX pour interrompre l'exécution de l'unité d'exécution. Les sous-routines sleep et usleep servent de système frontal à la sous-routine nsleep .

L'intervalle de temps réel pendant lequel le processus est suspendu est approximatif. L'intervalle de temps pour interrompre un processus peut prendre beaucoup de temps en raison des autres activités planifiées par le système, ou la mise en suspens du processus peut prendre moins de temps en raison d'un signal qui préempte la mise en suspens.

Pour la sous-routine nsleep , vous devez spécifier les paramètres Rqtp (Requested Time Pause) et Rmtp (Remaining Time Pause) de sorte que l'heure réelle d'interruption du processus puisse être identifiée. Normalement, la valeur du paramètre Rmtp équivaut à zéro. Par conception, la valeur maximale pouvant être utilisée dans le paramètre Rqtp est le nombre de nanosecondes par seconde.

Exemple

Pour interrompre un processus en cours d'exécution pendant 10 secondes, entrez la commande suivante:
sleep (10)

Valeurs renvoyées

Les sous-routines nsleep, sleepet usleep renvoient la valeur 0 si le temps demandé est écoulé.

Si la sous-routine nsleep renvoie la valeur -1, la notification d'un signal ou d'un événement a été reçue et le paramètre Rmtp est mis à jour avec le temps demandé moins le temps dormi (temps non dormi), et la variable globale errno est définie.

Si la sous-routine sleep est renvoyée en raison d'une excitation prématurée due à la fourniture d'un signal, la valeur de retour correspond à la durée de veille (durée demandée moins durée de veille) en secondes.

Codes d'erreur

Si la sous-routine nsleep échoue, la valeur -1 est renvoyée et la variable globale errno reçoit l'un des codes d'erreur suivants :

Article Descriptif
EINTR Un signal a été détecté par le processus appelant et le contrôle est renvoyé par la routine d'interception de signal, ou le processus est informé d'un événement via une fonction de notification d'événement.
EINVAL Le paramètre Rqtp a spécifié une valeur de nanoseconde inférieure à zéro ou supérieure ou égale à 1 seconde.
EFAULT Une adresse d'argument fait référence à la mémoire informée.
Remarque: Un numéro d'erreur peut également être défini sur EFAULT .

La sous-routine sleep aboutit toujours et aucune valeur de retour n'est réservée pour indiquer une erreur.