Ein Befehl timeout
ist ein Befehlszeilendienstprogramm, das einen bestimmten Befehl ausführt und ihn stoppt, wenn er nach einer bestimmten Zeit noch ausgeführt wird. Mit anderen Worten, der Befehl timeout
können Sie den Befehl mit einem von Ihnen angegebenen Timeout ausführen. Der Befehl timeout
ist Teil des zentralen GNU-Dienstprogrammpakets, das auf fast allen Linux-Distributionen installiert ist.
Dieser Befehl ist nützlich, wenn Sie einen Befehl ausführen möchten, der keine integrierte Zeitüberschreitungsoption hat, oder einen Prozess nach einer bestimmten Laufzeit stoppen möchten.
In diesem Artikel erklären wir, wie man die Befehle timeout
verwendet im Linux-Terminal.
Verwendung des Timeout-Befehls
Die Syntax für den Timeout-Befehl lautet wie folgt:
timeout [OPTIONS] DURATION COMMAND [ARG]…
DURATION
kann eine positive Ganzzahl oder eine Fließkommazahl sein, gefolgt von einem optionalen Einheitensuffix:
s
– Sekunden (Sekunden) (dies ist die Standardoption)m
– Minuten (Minuten)h
– Stunden (Stunden)d
– Tage (Tage)
Wenn keine Einheiten verwendet werden, ist der Standardwert Sekunden. Wenn die Dauer auf Null gesetzt wird, wird das zugehörige Timeout deaktiviert.
Befehlsoptionen müssen vor dem Argument angegeben werden.
Hier sind einige grundlegende Beispiele, die zeigen, wie der Befehl timeout
verwendet wird :
- Beenden Sie den Befehl
ping
nach fünf Sekunden::timeout 5 ping 8.8.8.8 - Beenden Sie den Befehl nach fünf Minuten:timeout 5m ping 8.8.8.8
- Beenden Sie den Befehl nach einer Minute und sechs Sekunden:timeout 1.1m ping 8.8.8.8
Wenn Sie einen Befehl ausführen möchten, der Berechtigungen wie tcpdump
erfordert , fügen Sie ein Präfix sudo
hinzu vor dem Befehl timeout
:
sudo timeout 300 tcpdump -n -w data.pcap
Spezielle Signale senden
Wenn kein Signal gegeben wird, ist es timeout
verwendet das SIGTERM-Signal für den angegebenen Befehl, wenn das Zeitlimit erreicht ist. Mit dem -s
können Sie angeben, welches Signal verwendet werden soll ( --signal
) Option .
Zum Beispiel, um SIGKILL
zu senden zu einem Befehl ping
Nach einer Minute können Sie den Befehl verwenden:
sudo timeout -s SIGKILL ping 8.8.8.8
Signal kann durch seinen Namen wie SIGKILL
angegeben werden oder Zahl wie 9
. Der folgende Befehl ist identisch mit dem vorherigen:
sudo timeout -s 9 ping 8.8.8.8
Um eine Liste aller verfügbaren Signale zu erhalten, verwenden Sie den Befehl kill -l
:
kill -l
Beenden Sie den hängengebliebenen Prozess
SIGTERM
, kann das bei Überschreitung des Timeouts gesendete Standardsignal von einigen Prozessen abgefangen oder ignoriert werden. In dieser Situation läuft der Prozess weiter, nachdem das Beendigungssignal gesendet wurde.
Um sicherzustellen, dass der überwachte Befehl gestoppt wurde, verwenden Sie die Option -k
( --kill-after
) gefolgt von einem Zeitraum. Wenn diese Option verwendet wird, nachdem das angegebene Timeout erreicht ist, wird der Befehl timeout
sendet ein Signal SIGKILL
an das Programm, das der Eingabe des Benutzers entspricht.
Im folgenden Beispiel ist es timeout
führt den Befehl eine Minute lang aus, und wenn er nicht beendet wird, wird er das Programm nach zehn Sekunden „beenden“:
sudo timeout -k 10 1m ping 8.8.8.8
timeout -k “./test.sh”
Der Prozess wird beendet, nachdem das angegebene Zeitlimit erreicht ist, obwohl er feststeckt.
Ausstiegsstatus beibehalten
timeout
gibt 124
zurück wenn das Zeitlimit erreicht ist. Ansonsten der Befehl timeout
gibt den Exit-Status des verwalteten Befehls zurück.
Um den Beendigungsstatus des Befehls auch bei Erreichen des Timeouts zurückzugeben, verwenden Sie die Option --preserve-status
:
timeout --preserve-status 5 ping 8.8.8.8
Befehle im Vordergrund ausführen
Standardmäßig ist es timeout
führt einen Befehl im Hintergrund aus. Wenn Sie den Befehl im Vordergrund ausführen möchten, verwenden Sie die Option --foreground
:
timeout --foreground 5m ./script.sh
Diese Option ist nützlich, wenn Sie interaktive Befehle ausführen möchten, die eine Benutzereingabe erfordern.
Schlussfolgerung
Befehl ist timeout
Wird verwendet, um einen bestimmten Befehl mit einem Zeitlimit nach dem Willen des Benutzers auszuführen.
Befehle timeout
sind einfache Befehle, die nicht viele Optionen haben. Normalerweise verwenden Sie einen Befehl timeout
mit nur zwei Argumenten, Dauer und dem Befehl, der auftreten wird.