Explicación del comando timeout de Linux para principiantes (con ejemplos)
A veces, cuando ejecutas un comando en Linux, puedes querer ejecutarlo durante un tiempo determinado. Existe una utilidad de línea de comandos -el tiempo de espera- desarrollada específicamente para este fin. En este artículo, hablaremos de los fundamentos de este comando utilizando algunos ejemplos fáciles de entender.
Pero antes de hacerlo, conviene mencionar que todos los ejemplos de este tutorial se han probado en una máquina Ubuntu 18.04 LTS.
Comando de tiempo de espera de Linux
Como su nombre indica, el comando timeout en Linux te permite ejecutar un comando con un límite de tiempo. A continuación se muestra su sintaxis:
timeout [OPTION] DURATION COMMAND [ARG]...
Y así es como lo explica la página man de la herramienta:
timeout - run a command with a time limit
Start COMMAND, and kill it if still running after DURATION
A continuación hay algunos ejemplos al estilo de las preguntas y respuestas que deberían darte una mejor idea de cómo funciona esta herramienta.
Q1. ¿Cómo se utiliza el comando timeout?
El uso básico es bastante sencillo: sólo tienes que ejecutar «timeout» especificando en la entrada un valor de tiempo de espera (considerado en segundos), así como el comando que quieres ejecutar.
Por ejemplo, si quieres que el tiempo de espera de un comando ping sea de 5 segundos, así es como puedes utilizar timeout en este caso.
timeout 5 ping google.com
Q2. ¿Cómo obtener el estado de salida del comando en la salida?
Por defecto, si el comando timeout tiene éxito, devuelve 124 como estado de salida. A continuación se muestra un ejemplo:
En el primer caso, dejé que el comando de tiempo de espera se ejecutara con éxito, y como puedes ver, el estado de salida era 124. Sin embargo, durante la segunda ejecución, maté el comando a la fuerza utilizando Ctrl+C, y en ese caso, el estado de salida fue 0.
Pero en caso de que quieras que timeout devuelva el estado del comando de entrada aunque timeout se ejecute con éxito, tendrás que utilizar la opción de línea de comandos –preserve-status.
Por ejemplo:
timeout --preserve-status 5 ping google.com
Q3. ¿Cómo cambiar la señal que envía timeout?
No hace falta adivinar que timeout funciona enviando una señal al comando de entrada para que éste deje de ejecutarse cuando se acerque la fecha límite. Por defecto, el comando utilizaSIGTERM
.
Sin embargo, si quieres, puedes cambiar la señal que envía el tiempo de espera. Para ello, tendrás que utilizar la opción de línea de comandos -s y especificar como entrada la señal que quieres que envíe timeout.
Por ejemplo:
timeout -s SIGKILL [COMMAND]
Para obtener una lista de las señales disponibles que puedes enviar, ejecuta el siguiente comando:
kill -l
Q4. ¿Cómo hacer que timeout envíe automáticamente la señal KILL?
A veces, puedes encontrarte con un comando de entrada que sigue ejecutándose incluso después de que timeout envíe la señal inicial. Para casos como éste, timeout ofrece una opción «–kill-after».
Así es como lo explica la página man:
-k, --kill-after=DURATION
also send a KILL signal if COMMAND is still running
this long after the initial signal was sent
Como puedes ver, tienes que especificar una duración para que timeout sepa después de cuánto tiempo debe enviarse esta señal.
Conclusión
Dependiendo del tipo de trabajo que hagas, el comando timeout puede resultar una herramienta muy útil. Aquí, en este tutorial, hemos hablado de la mayoría de las opciones que ofrece esta utilidad. Cuando hayas terminado de practicarlas, puedes aprender más sobre timeout dirigiéndote a su página man.