Commande Linux timeout
timeout est une commande pratique dans les systèmes Linux, utilisée pour terminer les commandes en cours d'exécution après un temps spécifié. Cette commande est particulièrement adaptée aux scénarios suivants :
- Limiter les processus de longue durée
- Empêcher les scripts ou programmes de s'exécuter indéfiniment
- Définir des limites de temps d'exécution pour les opérations critiques
- Contrôle des délais d'attente dans les tests automatisés
La commande timeout fait partie du paquet GNU coreutils et est préinstallée dans la plupart des distributions Linux.
Syntaxe de commande
Le format de syntaxe de base de la commande timeout est le suivant :
timeout [选项] 持续时间 命令 [参数...]
Description du paramètre
-
Durée:
- Peut être un nombre pur (l'unité par défaut est la seconde)
- Peut également spécifier une unité :
10s(10 secondes),5m(5 minutes),1h(1 heure) - Prend en charge les décimales :
0.5s(500 millisecondes),1.5m(1 minute 30 secondes)
-
Commande:
- La commande ou le programme à exécuter
- Peut être une commande interne ou un programme externe
-
Parameters:
- Arguments passés à la commande
Options courantes
| Option | Description | Exemple |
|---|---|---|
-sou--signal |
Spécifier le signal envoyé après le délai d'attente (la valeur par défaut est TERM) | timeout -s KILL 5s command |
-kou--kill-after |
Si le signal initial est inefficace, envoyer le signal KILL après le délai spécifié | timeout -k 5s 10s command |
--preserve-status |
Renvoie le statut de sortie de la commande terminée | timeout --preserve-status 5s command |
--foreground |
Exécuter la commande au premier plan (par défaut, en arrière-plan) | timeout --foreground 5s command |
-vou--verbose |
Afficher la sortie détaillée | timeout -v 5s command |
Exemples d'utilisation
Utilisation de base
Exemple
timeout 5s ping example.com
# Terminer l'exécution du script après 1 minute
timeout 1m ./long_script.sh
Spécification du type de signal
Exemple
timeout -s INT 3s command
# Envoyer le signal KILL après 10 secondes (arrêt forcé)
timeout -s KILL 10s commande
Utilisation combinée
Exemple
timeout -k 5s 10s commande
Obtention du code de sortie
Exemple
timeout --preserve-status 5s commande
echo $? # Afficher le code de sortie
Scénarios d'application pratiques
1. Empêcher l'exécution infinie d'un script
Exemple
timeout 2h ./backup_database.sh
2. Contrôle des timeouts dans les tests automatisés
Exemple
timeout 30s ./run_test_case.sh
3. Délai d'expiration des opérations réseau
Exemple
timeout 1m wget http://example.com/large_file.zip
4. Gestion des délais d'expiration pour les programmes interactifs
Exemple
timeout 10s read -p "Veuillez saisir votre choix : " choice
Notes
-
Gestion des signaux:
- Certains programmes peuvent intercepter et ignorer le signal TERM ; dans ce cas, le signal KILL est nécessaire
- Utilisez le signal KILL avec prudence lors d'opérations importantes sur les données, car il peut entraîner une corruption des données
-
Gestion des processus enfants:
- Par défaut, timeout ne termine que le processus qu'il a directement démarré, pas nécessairement tous les processus enfants
- Pour terminer toute l'arborescence des processus, envisagez de combiner avec
killla commande
-
Précision temporelle:
- La précision temporelle du noyau Linux est généralement au niveau de la milliseconde
- Les durées très courtes (comme 0.001s) peuvent ne pas être contrôlées précisément
-
Valeurs de retour:
- Si la commande se termine avant le délai d'attente, le statut de sortie de la commande est renvoyé
- Si elle est terminée en raison d'un dépassement de délai, renvoie 124
- Si timeout lui-même rencontre une erreur, renvoie 125-128
Astuces avancées
1. Combinaison avec d'autres commandes
Exemple
timeout 30s command || echo "La commande a expiré, exécution du nettoyage..."
2. Utilisation dans les scripts
Exemple
if timeout 10s command; then
echo "Commande exécutée avec succès"
else
echo "La commande a expiré ou a échoué"
fi
3. Surveillance de l'utilisation des ressources
Exemple
(ulimit -t 10; timeout 20s command)
FAQ
Q1 : Quelle est la différence entre timeout et sleep ?
R : sleep attend simplement un temps spécifié, tandis que timeout limite le temps d'exécution d'une autre commande.
Q2 : Comment terminer tous les processus enfants démarrés par timeout ?
R : Vous pouvez utiliser la méthode du groupe de processus :
timeout --foreground 10s sh -c 'command & wait'
Q3 : Pourquoi mon programme ne se termine-t-il pas immédiatement après timeout ?
R : Cela peut être dû au fait que le programme a intercepté le signal TERM par défaut ; essayez d'utiliser le-s KILLoption.
Q4 : Comment déterminer si une commande a été terminée en raison d'un dépassement de délai ?
R : Vérifiez si le code de statut de sortie est 124 :
Exemple
if [ $? -eq 124 ]; then
echo "Commande interrompue en raison d'un délai d'attente"
fi
Résumé
La commande timeout est un outil très utile dans l'administration système Linux ; elle peut nous aider à :
- Contrôler le temps d'exécution des programmes pour éviter que les ressources ne soient occupées pendant de longues périodes
- Améliorer la robustesse des scripts et éviter les attentes infinies
- Mettre en œuvre des mécanismes de délai d'attente dans les tâches automatisées
- Gérer les opérations dont les temps d'exécution sont imprévisibles
En utilisant correctement la commande timeout, vous pouvez rendre votre administration système Linux plus efficace et fiable.
Autres extensions
Référence des commandes Linux