Come timeout un comando in bash senza inutili ritardi

Come timeout un comando in bash senza inutili ritardi

In Bash, a volte potrebbe essere necessario eseguire un comando che richiede molto tempo per essere completato e potresti non voler aspettare che finisca indefinitamente. Una soluzione a questo problema è utilizzare un comando timeout che limiti il ​​tempo che un comando può eseguire. Questo articolo, discuterà di come timeout un comando in bash senza inutili ritardi.

Timeout un comando in bash

Al timeout un comando in bash, possiamo usare il "tempo scaduto" comando. Il comando "timeout" non è disponibile per impostazione predefinita su tutti i sistemi, ma può essere installato utilizzando il gestore di pacchetti sulla maggior parte delle distribuzioni Linux, ecco la sintassi del comando "timeout":

Timeout [opzione] Comando di durata [Arg]


Qui l '"opzione" è un argomento facoltativo che specifica il comportamento del comando timeout, "durata" è il limite di tempo per l'esecuzione del comando e "comando [arg]" è il comando e i suoi argomenti che vogliamo eseguire.

Ad esempio, supponiamo che vogliamo eseguire il comando "Sleep" per cinque secondi, ma vogliamo timeout il comando dopo tre secondi ed ecco lo script di shell di esempio:

#!/Bin/Bash
Echo "Inizia il comando del sonno con il timeout di 3 secondi ..."
timeout 3s sleep 5s
comando echo "Sleep Finito."


Qui ho specificato la durata del timeout come 3 secondi e la durata del comando "Sleep" come 5 secondi. Il comando "timeout" fermerà il comando "sleep" dopo 3 secondi, anche se il comando "sleep" normalmente eseguirà per 5 secondi.


Per evitare ritardi inutili quando si utilizza il comando "timeout", possiamo usare l'opzione "-k". L'opzione "-k" specifica un segnale che verrà inviato al comando se supera il limite di timeout. Questo segnale farà terminare immediatamente il comando, invece di aspettare che finisca con grazia.

Ad esempio, supponiamo che vogliamo eseguire il comando "Sleep" per cinque secondi, ma vogliamo timeout il comando dopo tre secondi e inviare il segnale Sigint se supera il limite di timeout. Possiamo farlo eseguendo il seguente comando:

#!/Bin/Bash
Echo "Iniziare il comando di sonno con timeout di 3 secondi e segnale Sigint dopo 2 secondi"
timeout -k 2s 3s sleep 5s
comando echo "Sleep Finito."


Qui ho specificato la durata del timeout come 3 secondi e il segnale da inviare come Sigint se supera il limite di timeout. L'opzione "-k 2S" specifica che il segnale Sigint deve essere inviato dopo due secondi del limite di timeout.

Conclusione

Timeout Un comando in bash è uno strumento utile che può aiutarti a eseguire i comandi in modo più efficiente e prevenire ritardi inutili. Usando il comando "timeout" e l'opzione "-k", è possibile limitare il tempo in cui un comando può eseguire e inviare un segnale per terminarlo immediatamente se supera il limite di timeout. Questo ti aiuterà a risparmiare tempo ed eseguire i tuoi script in modo più efficiente.