Comment empêcher une commande dans Bash sans retard inutile

Comment empêcher une commande dans Bash sans retard inutile

Dans Bash, vous devrez parfois exécuter une commande qui prend beaucoup de temps à terminer, et vous ne voudrez peut-être pas attendre qu'il termine indéfiniment. Une solution à ce problème consiste à utiliser une commande de délai d'expiration qui limite le temps qu'une commande peut exécuter. Cet article discutera de la façon de passer une commande dans Bash sans retard inutile.

Timeout une commande en bash

Pour délasser une commande en bash, nous pouvons utiliser le "temps libre" commande. La commande «Timeout» n'est pas disponible par défaut sur tous les systèmes, mais il peut être installé à l'aide du gestionnaire de packages sur la plupart des distributions Linux, voici la syntaxe de la commande «Timeout»:

Timeout [Option] Durée Commande [Arg]


Ici, «l'option» est un argument facultatif qui spécifie le comportement de la commande timeout, la «durée» est la limite de temps pour l'exécution de la commande, et «Commande [arg]» est la commande et ses arguments que nous voulons exécuter.

Par exemple, disons que nous voulons exécuter la commande «Sleep» pendant cinq secondes, mais que nous voulons passer la commande après trois secondes et voici l'exemple de script de shell:

#!/ bac / bash
Echo "Démarrage du sommeil avec un délai de 3 secondes…"
Timeout 3s Sleep 5s
Echo "Commande de sommeil terminée."


Ici, j'ai spécifié la durée du délai d'expiration en 3 secondes, et la durée de la commande «Sleep» comme 5 secondes. La commande «Timeout» arrêtera la commande «Sleep» après 3 secondes, même si la commande «Sleep» s'exécuterait normalement pendant 5 secondes.


Pour éviter un délai inutile lors de l'utilisation de la commande «Timeout», nous pouvons utiliser l'option «-K». L'option «-K» spécifie un signal qui sera envoyé à la commande s'il dépasse la limite de temps mort. Ce signal entraînera la fin de la commande immédiatement, au lieu d'attendre qu'il termine gracieusement.

Par exemple, disons que nous voulons exécuter la commande «Sleep» pendant cinq secondes, mais que nous voulons délasser la commande après trois secondes et envoyer le signal Sigint s'il dépasse la limite de temps mort. Nous pouvons le faire en exécutant la commande suivante:

#!/ bac / bash
Echo "Démarrer la commande de sommeil avec un délai de 3 secondes et un signal SIGINT après 2 secondes"
Timeout -K 2s 3s Sleep 5s
Echo "Commande de sommeil terminée."


Ici, j'ai spécifié la durée du délai d'expiration en 3 secondes et le signal à envoyer comme Sigint s'il dépasse la limite de délai d'expiration. L'option «-K 2S» spécifie que le signal Sigint doit être envoyé après deux secondes de la limite de temps mort.

Conclusion

Timeout Une commande dans Bash est un outil utile qui peut vous aider à exécuter les commandes plus efficacement et à empêcher les retards inutiles. En utilisant la commande «Timeout» et l'option «-K», vous pouvez limiter la durée d'une commande peut s'exécuter et envoyer un signal pour le terminer immédiatement s'il dépasse la limite de délai d'expiration. Cela vous aidera à gagner du temps et à exécuter vos scripts plus efficacement.