timeout
est un utilitaire de ligne de commande qui exécute une commande spécifiée et la termine si elle est toujours en cours d'exécution après une période de temps donnée. En d'autres termes, timeout
permet d'exécuter une commande avec une limite de temps. Le timeout
La commande fait partie du package d'utilitaires de base GNU, qui est installé sur presque toutes les distributions Linux.
C'est pratique lorsque vous souhaitez exécuter une commande qui n'a pas d'option de délai d'attente intégrée.
Dans cet article, nous allons vous expliquer comment utiliser le timeout
Linux commande.
Comment utiliser le timeout
Commande #
La syntaxe du timeout
commande est la suivante :
timeout [OPTIONS] DURATION COMMAND [ARG]…
La DURATION
peut être un entier positif ou un nombre à virgule flottante, suivi d'un suffixe d'unité facultatif :
s
- secondes (par défaut)m
- minutesh
- heuresd
- jours
Lorsqu'aucune unité n'est utilisée, la valeur par défaut est les secondes. Si la durée est définie sur zéro, le timeout associé est désactivé.
Les options de la commande doivent être fournies avant les arguments.
Voici quelques exemples de base montrant comment utiliser le timeout
commande :
-
Terminer une commande après cinq secondes :
timeout 5 ping 8.8.8.8
-
Terminer une commande après cinq minutes :
timeout 5m ping 8.8.8.8
-
Terminer une commande après une minute et six secondes :
timeout 1.1m ping 8.8.8.8
Si vous souhaitez exécuter une commande nécessitant des privilèges élevés tels que tcpdump
, ajoutez sudo
avant timeout
:
sudo timeout 300 tcpdump -n -w data.pcap
Envoi du numéro de signal spécifique
Si aucun signal n'est donné, timeout
envoie le SIGTERM
signal à la commande gérée lorsque le temps limite est atteint. Vous pouvez spécifier le signal à envoyer en utilisant le -s
(--signal
).
Par exemple, pour envoyer SIGKILL
au ping
commande après une minute, vous utiliseriez :
sudo timeout -s SIGKILL ping 8.8.8.8
Vous pouvez spécifier le signal par son nom, tel que SIGKILL
, ou son numéro comme 9
. La commande suivante est identique à la précédente :
sudo timeout -s 9 ping 8.8.8.8
Pour obtenir une liste de tous les signaux disponibles, utilisez le kill -l
commande :
kill -l
Tuer les processus bloqués #
SIGTERM
, le signal par défaut envoyé lorsque le délai est dépassé, peut être intercepté ou ignoré par certains processus. Dans ces situations, le processus continue de s'exécuter après l'envoi du signal de fin.
Pour vous assurer que la commande surveillée est tuée, utilisez le -k
(--kill-after
) option suivie d'une période de temps. Lorsque cette option est utilisée après que le délai donné est atteint, le timeout
la commande envoie le SIGKILL
signal au programme géré qui ne peut pas être intercepté ou ignoré.
Dans l'exemple suivant, timeout
exécute la commande pendant une minute, et si elle n'est pas terminée, elle la tuera au bout de dix secondes :
sudo timeout -k 10 1m ping 8.8.8.8
timeout -k "./test.sh"
tué une fois le délai imparti écoulé
Conserver le statut de sortie #
timeout
renvoie 124
lorsque le délai est atteint. Sinon, il renvoie l'état de sortie de la commande gérée.
Pour renvoyer l'état de sortie de la commande même lorsque le délai est atteint, utilisez le --preserve-status
choix :
timeout --preserve-status 5 ping 8.8.8.8
Exécution en premier plan #
Par défaut, timeout
exécute la commande gérée en arrière-plan. Si vous souhaitez exécuter la commande au premier plan, utilisez le --foreground
choix :
timeout --foreground 5m ./script.sh
Cette option est utile lorsque vous souhaitez exécuter une commande interactive qui nécessite une entrée de l'utilisateur.
Conclusion #
Le timeout
commande est utilisée pour exécuter une commande donnée avec une limite de temps.
timeout
est une commande simple qui n'a pas beaucoup d'options. En règle générale, vous invoquerez timeout
uniquement avec deux arguments, la durée et la commande gérée.
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.