Parfois, lorsque vous exécutez une commande sous Linux, vous souhaiterez peut-être l'exécuter pendant une durée définie. Il existe un utilitaire de ligne de commande - timeout - qui est spécifiquement développé à cet effet. Dans cet article, nous aborderons les bases de cette commande à l'aide d'exemples faciles à comprendre.
Mais avant cela, il convient de mentionner que tous les exemples de ce didacticiel ont été testés sur une machine Ubuntu 18.04 LTS.
Commande de temporisation Linux
Comme son nom l'indique, la commande timeout sous Linux vous permet d'exécuter une commande avec une limite de temps. Voici sa syntaxe :
timeout [OPTION] DURATION COMMAND [ARG]...
Et voici comment la page de manuel de l'outil l'explique :
timeout - run a command with a time limit
Start COMMAND, and kill it if still running after DURATION
Voici quelques exemples de style Q&A qui devraient vous donner une meilleure idée du fonctionnement de cet outil.
Q1. Comment utiliser la commande timeout ?
L'utilisation de base est assez simple - exécutez simplement "timeout" en spécifiant en entrée une valeur de délai d'attente (considérée en secondes) ainsi que la commande que vous souhaitez exécuter.
Par exemple, si vous souhaitez expirer une commande ping après 5 secondes, voici comment vous pouvez utiliser le délai d'expiration dans ce cas.
timeout 5 ping google.com
Q2. Comment obtenir le statut de sortie de la commande en sortie ?
Par défaut, si la commande timeout réussit, elle renvoie 124 comme état de sortie. Voici un exemple :
Dans le premier cas, j'ai laissé la commande timeout s'exécuter avec succès et, comme vous pouvez le voir, l'état de sortie était de 124. Cependant, lors de la deuxième exécution, j'ai tué la commande avec force en utilisant Ctrl+C, et dans ce cas, l'état de sortie était 0.
Mais si vous souhaitez que timeout renvoie l'état de la commande d'entrée même si timeout s'exécute avec succès, vous devrez utiliser l'option de ligne de commande --preserve-status.
Par exemple :
timeout --preserve-status 5 ping google.com
Q3. Comment modifier le délai d'expiration du signal envoyé ?
Inutile de deviner que timeout fonctionne en envoyant un signal à la commande d'entrée pour que cette dernière arrête de s'exécuter à l'approche de l'échéance. Par défaut, SIGTERM
est utilisé par la commande.
Cependant, si vous le souhaitez, vous pouvez modifier le signal envoyé par timeout. Pour cela, vous devrez utiliser l'option de ligne de commande -s et spécifier en entrée le signal que vous souhaitez que le délai d'attente envoie.
Par exemple :
timeout -s SIGKILL [COMMAND]
Pour récupérer une liste des signaux disponibles que vous pouvez envoyer, exécutez la commande suivante :
kill -l
Q4. Comment faire en sorte que le délai d'attente envoie automatiquement le signal KILL ?
Parfois, vous pouvez rencontrer une commande d'entrée qui continue de s'exécuter même après que le délai d'attente ait envoyé le signal initial. Pour de tels cas, timeout offre une option '--kill-after'.
Voici comment la page de manuel l'explique :
-k, --kill-after=DURATION
also send a KILL signal if COMMAND is still running
this long after the initial signal was sent
Donc, comme vous pouvez le voir, vous devez spécifier une durée pour que le délai d'attente sache après combien de temps ce signal doit être envoyé.
Conclusion
Selon le type de travail que vous effectuez, la commande timeout peut s'avérer être un outil très pratique. Ici, dans ce tutoriel, nous avons discuté de la majorité des options offertes par cet utilitaire. Une fois que vous avez fini de les pratiquer, vous pouvez en savoir plus sur le délai d'attente en vous rendant sur sa page de manuel.