Wie Sie einen Befehl in Bash ohne unnötige Verzögerung ausführen können

Wie Sie einen Befehl in Bash ohne unnötige Verzögerung ausführen können

In Bash müssen Sie manchmal einen Befehl ausführen, der lange dauert, und Sie möchten möglicherweise nicht darauf warten, dass er auf unbestimmte Zeit fertig ist. Eine Lösung für dieses Problem besteht darin, einen Timeout -Befehl zu verwenden, der die Zeit einschränkt, die ein Befehl ausgeführt kann. In diesem Artikel wird erläutert.

Zeitüberschreitung einen Befehl in Bash

Um einen Befehl in Bash auszusetzen, können wir die verwenden "Auszeit" Befehl. Der Befehl „Timeout“ ist in allen Systemen standardmäßig nicht verfügbar, kann jedoch mit dem Paketmanager für die meisten Linux -Verteilungen installiert werden. Hier ist die Syntax des Befehl „Timeout“:

Timeout [Option] Dauerbefehl [arg]


Hier ist die "Option" ein optionales Argument, das das Verhalten des Timeout -Befehls angibt, "Dauer" ist die Zeitlimit für den Ausführen des Befehls, und "Befehl [arg]" ist der Befehl und seine Argumente, die wir ausführen möchten.

Nehmen wir zum Beispiel an, wir möchten den Befehl „Schlaf“ für fünf Sekunden ausführen, aber wir möchten den Befehl nach drei Sekunden Zeit ausführen, und hier ist das Beispiel -Shell -Skript:

#!/Bin/Bash
Echo "Sleep -Befehl mit Timeout von 3 Sekunden ..."
Zeitüberschreitung 3s Schlaf 5s
Echo "Sleep Command beendet beendet."


Hier habe ich die Dauer der Auszeit von 3 Sekunden und die Dauer des „Schlaf“ -Befehls als 5 Sekunden angegeben. Der Befehl „Timeout“ stoppt den Befehl „Schlaf“ nach 3 Sekunden, obwohl der Befehl „Schlaf“ normalerweise 5 Sekunden lang ausgeführt wird.


Um unnötige Verzögerungen bei der Verwendung des Befehl "Timeout" zu verhindern, können wir die Option "-K" verwenden. Die Option "-K" gibt ein Signal an, das an den Befehl gesendet wird, wenn es das Zeitüberschreitungslimit überschreitet. Dieses Signal wird dazu führen, dass der Befehl sofort endet, anstatt darauf zu warten, dass er anmutig fertig ist.

Nehmen wir zum Beispiel an, wir möchten den Befehl „Schlaf“ für fünf Sekunden ausführen, aber wir möchten den Befehl nach drei Sekunden Zeitüberschreitung ausführen und das SIGINT -Signal senden, wenn es das Zeitüberschreitungslimit überschreitet. Wir können dies tun, indem wir den folgenden Befehl ausführen:

#!/Bin/Bash
Echo "Sleep -Befehl mit Timeout von 3 Sekunden und SIGINT -Signal nach 2 Sekunden" starten "
Timeout -k 2s 3s Schlaf 5s
Echo "Sleep Command beendet beendet."


Hier habe ich die Zeitüberschreitungsdauer als 3 Sekunden angegeben und das Signal als SIGINT gesendet, wenn es das Zeitüberschreitungslimit überschreitet. Die Option „-K 2S“ gibt an, dass das SIGINT-Signal nach zwei Sekunden des Zeitüberschreitungslimits gesendet werden sollte.

Abschluss

Timeout Ein Befehl in Bash ist ein nützliches Tool, mit dem Sie Befehle effizienter ausführen und unnötige Verzögerungen verhindern können. Durch die Verwendung des Befehls "Timeout" und der Option "-K" können Sie die Zeitspanne einschränken, die ein Befehl ausführen kann, und ein Signal zu senden, um es sofort zu beenden, wenn es das Zeitüberschreitungslimit überschreitet. Auf diese Weise können Sie Zeit sparen und Ihre Skripte effizienter ausführen.