CMDécouverte sleep, wait, timeout pour gérer le timing des processus !
Cette vidéo présente trois commandes Linux essentielles pour contrôler le timing d’opérations dans des scripts shell (sleep, wait, timeout), avec un bonus sur l’utilisation de read -t pour des pauses interruptibles.

SYNTHÈSE STRUCTURÉE
sleep : une pause simple et flexible
La commande sleep ne fait qu’une chose : attendre un temps donné avant de rendre la main. Elle est idéale pour insérer un délai entre deux commandes dans un script. Adrien précise : « Elle sera relativement pratique par exemple si vous avez envie d’enchaîner deux commandes et qu’entre ces deux commandes, vous voulez attendre un certain temps. »
La durée par défaut est en secondes, mais des suffixes permettent d’éviter les conversions : 5m pour 5 minutes, 2h pour 2 heures, 1d pour 1 jour. On peut aussi utiliser des décimales, comme 0.5 pour une demi-seconde.
wait : synchroniser des processus en arrière-plan
wait est une commande built-in de Bash (attention, son comportement peut varier sur d’autres shells comme ZSH ou CSH). Elle bloque l’exécution jusqu’à ce qu’un ou plusieurs processus lancés en arrière-plan (avec &) se terminent.
Adrien illustre : « Si vous faites du scripting, que vous lancez une ou trois commandes dans votre script et que vous souhaitez attendre qu’une commande en particulier soit terminée avant d’en lancer une autre, wait pourra vous être utile. »
Pour récupérer le PID du processus lancé en arrière-plan, on utilise la variable spéciale $!. Exemple :
sleep 45 &
pid_attente=$!
wait $pid_attente
echo "CMD3"
timeout : limiter la durée d’exécution d’un processus
timeout exécute une commande et l’interrompt si elle dépasse une durée spécifiée. Par défaut, elle envoie un signal SIGTERM (arrêt propre). Si le processus résiste, on peut forcer un SIGKILL avec l’option -k.
Adrien explique : « Timeout peut être vraiment très pratique pour éviter que des processus ne s’exécutent indéfiniment si jamais vous pouvez avoir un risque. »
Exemple avec arrêt forcé :
timeout -k 9 10 htop
Le code de retour de timeout est crucial : 124 signifie que c’est le timeout qui a interrompu le processus, 0 indique une terminaison normale, et tout autre code provient de la commande elle-même.
Bonus : read -t pour une pause interruptible
La commande read sert normalement à lire une saisie clavier, mais son option -t permet d’ajouter un timeout. Si l’utilisateur appuie sur Entrée avant la fin du délai, la pause est interrompue et la suite du script s’exécute immédiatement.
Adrien précise : « J’utilise principalement cette option -t de la commande read pour justement dans certains scripts faire une pause mais si moi je suis devant, pouvoir interrompre la pause. »
Exemple :
read -t 10 -p "Lancement de CMD5 dans 10 secondes (Entrée pour annuler) : "
echo "CMD5"
La saisie de l’utilisateur est stockée dans la variable $REPLY par défaut.
CONCEPTS CLÉS
- Code de retour (exit code) : valeur numérique renvoyée par une commande après son exécution (0 = succès, 124 = timeout, etc.). Permet de contrôler le flux d’un script.
- Signal SIGTERM vs SIGKILL :
SIGTERM(signal 15) demande poliment l’arrêt d’un processus ;SIGKILL(signal 9) le tue immédiatement sans possibilité de nettoyage. - Variable
$!: contient le PID du dernier processus lancé en arrière-plan dans le shell courant. - Built-in vs commande externe :
waitest intégré à Bash (built-in), ce qui garantit une exécution rapide et cohérente, contrairement à une commande externe qui pourrait varier selon les systèmes.
CONCLUSION
Ces quatre outils (sleep, wait, timeout, read -t) offrent un contrôle fin du timing dans les scripts shell, que ce soit pour insérer des délais, synchroniser des tâches parallèles, limiter la durée d’exécution ou permettre une interaction utilisateur. Leur maîtrise est essentielle pour écrire des scripts robustes et prévisibles, en particulier dans des contextes d’automatisation ou de supervision système.