Cómo usar el tiempo de espera para ejecutar comandos temporizados en Linux

27 feb 2021 3 min di lettura
Cómo usar el tiempo de espera para ejecutar comandos temporizados en Linux
Indice dei contenuti

Introducción

timeout es una utilidad de línea de comandos que ejecuta un comando específico y lo termina si aún se está ejecutando después de un período de tiempo específico. En otras palabras, permite un timeout de espera para ejecutar un comando con un límite de tiempo. El timeout es parte del paquete de utilidades principales de GNU que se instala en casi todas las distribuciones de Linux.

Esto es útil cuando desea ejecutar un comando que no tiene una opción de tiempo de espera incorporada.

En este artículo, explicaremos cómo usar el timeout

Cómo utilizar el comando de tiempo de espera

La sintaxis del timeout es la siguiente:

timeout [OPTIONS] DURATION COMMAND [ARG]…

El DURATION puede ser un número entero positivo o un número de punto flotante, seguido de un sufijo de unidad opcional:

  • s - segundos (predeterminado)
  • m - minutos
  • h - horas
  • d - 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 de los argumentos.

A continuación, se muestran algunos ejemplos básicos que demuestran cómo utilizar el comando timeout

Finalizar un comando después de 5 segundos:

timeout 5 ping 8.8.8.8

Finalizar un comando después de 5 minutos:

timeout 5m ping 8.8.8.8

Finalizar un comando después de 1 y 6 segundos:

timeout 1.6m ping 8.8.8.8

Si desea ejecutar un comando que requiere privilegios elevados como tcpdump, anteponga el sudo antes del timeout:

sudo timeout 300 tcpdump -n -w data.pcap

Envía una señal específica

Si no se da ninguna señal, el timeout envía la SIGTERM al comando administrado cuando se alcanza el límite de tiempo. Puede especificar qué señal enviar usando la -s ( --signal ).

Por ejemplo, para enviar SIGKILL al ping después de 1 minuto, usaría:

sudo timeout -s SIGKILL ping 8.8.8.8

La señal se puede especificar con el nombre SIGKILL o con su número correspondiente 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

Matar (matar) procesos bloqueados

SIGTERM, la señal predeterminada que se envía cuando se excede el límite de tiempo, puede ser detectada o ignorada por algunos procesos. En tales situaciones, el proceso continúa ejecutándose después de enviar la señal de terminación.

Para asegurarse de que se cancele el comando monitoreado, use la -k ( --kill-after ) después de un período de tiempo. Cuando se usa esta opción después de que se alcanza el límite de tiempo especificado, el comando de timeout SIGKILL al programa administrado que no se puede capturar ni ignorar.

En el siguiente ejemplo, el timeout ejecuta el comando para un 1 y, si no se termina, lo matará después de 10 segundos:

sudo timeout -k 10 1m ping 8.8.8.8

Conservación del estado de salida

timeout devuelve 124 cuando se alcanza el límite de tiempo. De lo contrario, devuelve el estado de salida del comando administrado.

Para devolver el estado de salida del comando incluso cuando se alcanza el límite de tiempo, use la opción --preserve-status

timeout --preserve-status 5 ping 8.8.8.8

Corriendo en primer plano (primer plano)

De forma predeterminada, el timeout ejecuta el comando administrado 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 un comando interactivo que requiere la entrada del usuario.

Conclusión

El timeout se usa para ejecutar un comando determinado con un límite de tiempo.

timeout es un comando simple que no tiene muchas opciones. Por lo general, invocará el timeout con solo dos argumentos, la duración y el comando manejado.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.