So überschreiten Sie einen Befehl in Bash ohne unnötige Verzögerung

In Bash müssen Sie möglicherweise manchmal einen Befehl ausführen, dessen Ausführung lange dauert, und Sie möchten möglicherweise nicht auf unbestimmte Zeit warten, bis er abgeschlossen ist. Eine Lösung für dieses Problem besteht darin, einen Timeout-Befehl zu verwenden, der die Zeit begrenzt, die ein Befehl ausgeführt werden kann. In diesem Artikel wird erläutert, wie Sie einen Befehl in Bash ohne unnötige Verzögerung mit einer Zeitüberschreitung versehen können.

Timeout eines Befehls in Bash

Um einen Befehl in Bash zu timeouten, können wir Folgendes verwenden „Auszeit“ Befehl. Der Befehl „timeout“ ist nicht standardmäßig auf allen Systemen verfügbar, kann aber auf den meisten Linux-Distributionen über den Paketmanager installiert werden. Hier ist die Syntax des Befehls „timeout“:

Auszeit [OPTION] DAUER-BEFEHL [ARG]

Hier ist „OPTION“ ein optionales Argument, das das Verhalten des Timeout-Befehls angibt, „DURATION“ ist das Zeitlimit für die Ausführung des Befehls und „COMMAND [ARG]„ist der Befehl und seine Argumente, die wir ausführen möchten.

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

#!/bin/bash
echo „Schlafbefehl wird mit Zeitüberschreitung von 3 Sekunden gestartet …“
Timeout 3s Schlaf 5s
echo „Sleep-Befehl beendet.“

Hier habe ich die Dauer des Timeouts mit 3 Sekunden und die Dauer des „Sleep“-Befehls mit 5 Sekunden angegeben. Der Befehl „timeout“ stoppt den Befehl „sleep“ nach 3 Sekunden, obwohl der Befehl „sleep“ normalerweise 5 Sekunden lang ausgeführt würde.

Um unnötige Verzögerungen bei der Verwendung des Befehls „timeout“ zu vermeiden, können wir die Option „-k“ verwenden. Die Option „-k“ gibt ein Signal an, das an den Befehl gesendet wird, wenn dieser das Timeout-Limit überschreitet. Dieses Signal führt dazu, dass der Befehl sofort beendet wird, anstatt darauf zu warten, dass er ordnungsgemäß beendet wird.

Nehmen wir zum Beispiel an, wir möchten den Befehl „sleep“ fünf Sekunden lang ausführen, den Befehl aber nach drei Sekunden abbrechen und das SIGINT-Signal senden, wenn das Timeout-Limit überschritten wird. Wir können dies tun, indem wir den folgenden Befehl ausführen:

#!/bin/bash
echo „Ruhezustandsbefehl mit Timeout von 3 Sekunden und SIGINT-Signal nach 2 Sekunden starten“
Timeout -k 2s 3s Schlaf 5s
echo „Sleep-Befehl beendet.“

Hier habe ich die Timeout-Dauer mit 3 Sekunden und das zu sendende Signal als SIGINT angegeben, wenn es das Timeout-Limit überschreitet. Die Option „-k 2s“ gibt an, dass das SIGINT-Signal nach zwei Sekunden des Timeout-Limits gesendet werden soll.

Abschluss

Timeout eines Befehls in Bash ist ein nützliches Tool, das Ihnen dabei helfen kann, Befehle effizienter auszuführen und unnötige Verzögerungen zu vermeiden. Durch die Verwendung des Befehls „timeout“ und der Option „-k“ können Sie die Zeitspanne begrenzen, die ein Befehl ausgeführt werden kann, und ein Signal senden, um ihn sofort zu beenden, wenn er das Timeout-Limit überschreitet. Dies hilft Ihnen, Zeit zu sparen und Ihre Skripte effizienter auszuführen.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen