![](https://m.unixlinux.online/article/uploadfiles/202205/2022050508580269.jpg)
Un comando timeout
es una utilidad de línea de comandos que ejecuta un comando específico y lo detiene si aún se está ejecutando después de un cierto período de tiempo. En otras palabras, el comando timeout
le permite ejecutar el comando con un tiempo de espera que especifique. El comando timeout
es parte del paquete básico de utilidades GNU que está instalado en casi todas las distribuciones de Linux.
Este comando es útil cuando desea ejecutar un comando que no tiene una opción de tiempo de espera integrada o detener un proceso después de una cierta cantidad de tiempo en ejecución.
En este artículo, explicaremos cómo usar los comandos timeout
en la terminal de Linux.
Cómo usar el comando de tiempo de espera
La sintaxis del comando de tiempo de espera es la siguiente:
timeout [OPTIONS] DURATION COMMAND [ARG]…
DURATION
puede ser un número entero positivo o un número de punto flotante, seguido de un sufijo de unidad opcional:
s
– segundos (segundos) (esta es la opción predeterminada)m
– minutos (minutos)h
– horas (horas)d
– días (días)
Cuando no se utilizan unidades, el valor predeterminado es segundos. Si la duración se establece en cero, el tiempo de espera asociado se desactiva.
Las opciones de comando deben proporcionarse antes del argumento.
Aquí hay algunos ejemplos básicos que muestran cómo usar el comando timeout
:
- Detener el comando
ping
después de cinco segundos::timeout 5 ping 8.8.8.8 - Detener el comando después de cinco minutos:tiempo de espera 5m ping 8.8.8.8
- Detener el comando después de un minuto y seis segundos:tiempo de espera 1.1m ping 8.8.8.8
Si desea ejecutar un comando que requiere privilegios como tcpdump
, añade un prefijo sudo
antes del comando timeout
:
sudo timeout 300 tcpdump -n -w data.pcap
Enviar señales específicas
Si no se da ninguna señal, timeout
utilizará la señal SIGTERM para el comando especificado cuando se alcance el tiempo de espera. Puede especificar qué señal usar usando -s
( --signal
) opción .
Por ejemplo, para enviar SIGKILL
a un comando ping
después de un minuto, puede usar el comando:
sudo timeout -s SIGKILL ping 8.8.8.8
La señal se puede especificar por su nombre como SIGKILL
o número como 9
. El siguiente comando es idéntico al anterior:
sudo timeout -s 9 ping 8.8.8.8
Para obtener una lista de todas las señales disponibles, use el comando kill -l
:
kill -l
Eliminar el proceso atascado
SIGTERM
, algunos procesos pueden detectar o ignorar la señal predeterminada que se envía cuando se supera el tiempo de espera. En esa situación, el proceso continúa ejecutándose después de que se envía la señal de terminación.
Para asegurarse de que el comando monitoreado se haya detenido, use la opción -k
( --kill-after
) seguido de un período de tiempo. Cuando se usa esta opción después de alcanzar el tiempo de espera dado, el comando timeout
envía una señal SIGKILL
al programa correspondiente a la entrada del usuario.
En el siguiente ejemplo, timeout
ejecuta el comando durante un minuto y, si no se cancela, "matará" el programa después de diez segundos:
sudo timeout -k 10 1m ping 8.8.8.8
timeout -k “./test.sh”
El proceso se cancelará una vez que se alcance el límite de tiempo dado, aunque esté atascado.
Mantener el estado de salida
timeout
devolverá 124
cuando se ha llegado al límite de tiempo. De lo contrario, el comando timeout
devolverá el estado de salida del comando administrado.
Para devolver el estado de salida del comando incluso cuando se alcanza el tiempo de espera, use la opción --preserve-status
:
timeout --preserve-status 5 ping 8.8.8.8
Ejecución de comandos en primer plano
Por defecto, timeout
ejecuta un comando en segundo plano. Si desea ejecutar el comando en primer plano, use la opción --foreground
:
timeout --foreground 5m ./script.sh
Esta opción es útil cuando desea ejecutar comandos interactivos que requieren la entrada del usuario.
Conclusión
El comando es timeout
se utiliza para ejecutar un determinado comando con un límite de tiempo según la voluntad del usuario.
Comandos timeout
son comandos simples que no tienen muchas opciones. Por lo general, utilizará un comando timeout
con solo dos argumentos, duración y el comando que ocurrirá.