timeout
è un'utilità della riga di comando che esegue un comando specificato e lo termina se è ancora in esecuzione dopo un determinato periodo di tempo. In altre parole, timeout
consente di eseguire un comando con un limite di tempo. Il timeout
command fa parte del pacchetto di utilità di base di GNU, che è installato su quasi tutte le distribuzioni Linux.
È utile quando vuoi eseguire un comando che non ha un'opzione di timeout incorporata.
In questo articolo spiegheremo come usare il timeout
di Linux comando.
Come utilizzare il timeout
Comando #
La sintassi per il timeout
il comando è il seguente:
timeout [OPTIONS] DURATION COMMAND [ARG]…
La DURATION
può essere un numero intero positivo o un numero a virgola mobile, seguito da un suffisso di unità opzionale:
s
- secondi (predefinito)m
- minutih
- ored
- giorni
Quando non viene utilizzata alcuna unità, il valore predefinito è secondi. Se la durata è impostata a zero, il timeout associato è disabilitato.
Le opzioni di comando devono essere fornite prima degli argomenti.
Ecco alcuni esempi di base che dimostrano come utilizzare il timeout
comando:
-
Termina un comando dopo cinque secondi:
timeout 5 ping 8.8.8.8
-
Termina un comando dopo cinque minuti:
timeout 5m ping 8.8.8.8
-
Termina un comando dopo un minuto e sei secondi:
timeout 1.1m ping 8.8.8.8
Se vuoi eseguire un comando che richiede privilegi elevati come tcpdump
, anteponi sudo
prima del timeout
:
sudo timeout 300 tcpdump -n -w data.pcap
Invio di un segnale specifico #
Se non viene fornito alcun segnale, timeout
invia il SIGTERM
segnalare al comando gestito al raggiungimento del tempo limite. Puoi specificare quale segnale inviare utilizzando i -s
(--signal
) opzione.
Ad esempio, per inviare SIGKILL
al ping
comando dopo un minuto, useresti:
sudo timeout -s SIGKILL ping 8.8.8.8
Puoi specificare il segnale in base al nome, ad esempio SIGKILL
o il suo numero come 9
. Il comando seguente è identico al precedente:
sudo timeout -s 9 ping 8.8.8.8
Per ottenere un elenco di tutti i segnali disponibili, usa kill -l
comando:
kill -l
Uccidere i processi bloccati #
SIGTERM
, il segnale predefinito inviato quando viene superato il limite di tempo, può essere catturato o ignorato da alcuni processi. In queste situazioni, il processo continua a essere eseguito dopo l'invio del segnale di terminazione.
Per assicurarti che il comando monitorato venga terminato, usa -k
(--kill-after
) opzione seguita da un periodo di tempo. Quando questa opzione viene utilizzata una volta raggiunto il limite di tempo specificato, il timeout
il comando invia il SIGKILL
segnale al programma gestito che non può essere catturato o ignorato.
Nell'esempio seguente, timeout
esegue il comando per un minuto e, se non viene terminato, lo interromperà dopo dieci secondi:
sudo timeout -k 10 1m ping 8.8.8.8
timeout -k “./test.sh”
ucciso una volta raggiunto il limite di tempo indicato
Preservare lo stato di uscita #
timeout
restituisce 124
quando viene raggiunto il limite di tempo. In caso contrario, restituisce lo stato di uscita del comando gestito.
Per restituire lo stato di uscita del comando anche al raggiungimento del limite di tempo, utilizzare il --preserve-status
opzione:
timeout --preserve-status 5 ping 8.8.8.8
Correndo in primo piano #
Per impostazione predefinita, timeout
esegue il comando gestito in background. Se vuoi eseguire il comando in primo piano, usa il --foreground
opzione:
timeout --foreground 5m ./script.sh
Questa opzione è utile quando vuoi eseguire un comando interattivo che richiede l'input dell'utente.
Conclusione #
Il timeout
comando viene utilizzato per eseguire un determinato comando con un limite di tempo.
timeout
è un comando semplice che non ha molte opzioni. In genere invocherai timeout
solo con due argomenti, la durata e il comando gestito.
Se hai domande o feedback, sentiti libero di lasciare un commento.