Commandes de base

sleep, wait et timeout : Gestion du temps d'exécution des processus

Table des matières

Introduction



Dans cet article, on va voir 3 commandes : sleep, wait et timeout.
Elles sont particulièrement utiles pour contrôler le timing des opérations.

Comme d'habitude, chaque commande sera associée d'exemples pour comprendre comment elles fonctionnent.


Commande sleep



La commande sleep a comme objectif d'attendre un temps donné.

La syntaxe est la suivante :
Code BASH :
sleep [nombre][suffixe]

Où :
nombre : nombre entier d'unité de temps
suffixe : peut être s (secondes), m (minutes), h (heures) ou d (jours).
Par défaut, sleep utilise des secondes.

Exemple d'attente de 5 secondes :
Code BASH :
sleep 5 ; echo Texte affiché au bout de 5 secondes


Attendre 2 minutes :
Code BASH :
sleep 2m


Attendre 1 heure :
Code BASH :
sleep 1h


Attendre 1 jour :
Code BASH :
sleep 1d



Commande wait



La commande wait est aussi bien une commande built-in de bash et une commande externe.
Elle permet d'attendre la fin d'un ou plusieurs processus en arrière-plan.

La syntaxe est la suivante :
Code BASH :
wait [PID]

PID est l'identifiant du processus qu'on souhaite attendre.
Si aucun PID n'est spécifié, wait attendra tous les processus en arrière-plan.

Voici un exemple simple :
Code BASH :
sleep 10 &
ATTENTE="$!"
echo "Script continue"
wait $ATTENTE
echo "Processus terminé."

Ici :
- sleep 10 & exécute la commande sleep en arrière-plan (je pends la commande vue précédemment, mais ça peut être un mysqldump ou tout autre processus dont on ne maitrise pas forcément la durée d'exécution)
- $! est une variable spéciale qui représente le PID du dernier processus exécuté en arrière-plan (avec &) et elle est stockée dans la variable ATTENTE
- Il est affiché "Script continue"
- wait attend que ce processus "sleep 10" se termine
- Dès que le processus est terminé, "Processus terminé" s'affiche

Voici un deuxième exemple :
Code BASH :
sleep 3 &
sleep 10 &
wait
echo "Tous les processus sont terminés."

Ici, wait attend que les 2 processus lancés en arrière plan (les 2 sleep) soient terminés pour écrire "Tous les processus sont terminés."


La commande timeout



La commande timeout exécute une commande et la termine si elle dépasse une durée spécifiée. C'est utile pour éviter que des processus ne s'exécutent indéfiniment.

La syntaxe est la suivante :
Code BASH :
timeout [durée] [commande]


Où :
durée : temps maximum que la commande est autorisée à s'exécuter.
commande : commande à exécuter.

Voici un exemple :
Code BASH :
timeout 5 sleep 100

Ici la commande sleep 100 sera interrompue après 5 secondes, même si elle n'a pas encore terminé.

On pourra utiliser timeout avec un script, un programme ou toute autre commande :
Code BASH :
timeout 5 htop


Par défaut c'est un signal d'arrêt propre qui est demandé (SIGTERM).
Il sera possible, d'envoyer un arrêt brutal (SIGKILL) après un laps de temps grâce à l'option -k :

Code BASH :
timeout -k 5 10 htop

Ici, on exécute htop pendant 10 secondes.
Si htop ne s'est pas arrêté au bout de 5 secondes, on envoie un SIGKILL (vous savez un kill -9)
Cette page a été vue 311 fois