timeout
ist ein Befehlszeilendienstprogramm, das einen bestimmten Befehl ausführt und ihn beendet, wenn er nach einer bestimmten Zeit noch ausgeführt wird. Mit anderen Worten, timeout
ermöglicht es Ihnen, einen Befehl mit einem Zeitlimit auszuführen. Das timeout
Der Befehl ist Teil des GNU Core Utilities-Pakets, das auf fast jeder Linux-Distribution installiert ist.
Dies ist praktisch, wenn Sie einen Befehl ausführen möchten, der keine integrierte Zeitüberschreitungsoption hat.
In diesem Artikel erklären wir, wie Sie das Linux-timeout
verwenden Befehl.
So verwenden Sie das timeout
Befehl #
Die Syntax für das timeout
Befehl lautet wie folgt:
timeout [OPTIONS] DURATION COMMAND [ARG]…
Die DURATION
kann eine positive Ganzzahl oder eine Fließkommazahl sein, gefolgt von einem optionalen Einheitensuffix:
s
- Sekunden (Standard)m
- Minutenh
- Stundend
- Tage
Wenn keine Einheit verwendet wird, werden standardmäßig Sekunden verwendet. Wenn die Dauer auf Null gesetzt wird, wird das zugehörige Timeout deaktiviert.
Die Befehlsoptionen müssen vor den Argumenten angegeben werden.
Hier sind ein paar grundlegende Beispiele, die zeigen, wie man timeout
verwendet Befehl:
-
Befehl nach fünf Sekunden beenden:
timeout 5 ping 8.8.8.8
-
Befehl nach fünf Minuten beenden:
timeout 5m ping 8.8.8.8
-
Befehl nach einer Minute und sechs Sekunden beenden:
timeout 1.1m ping 8.8.8.8
Wenn Sie einen Befehl ausführen möchten, der erhöhte Berechtigungen erfordert, wie z. B. tcpdump
, stellen Sie sudo
voran vor timeout
:
sudo timeout 300 tcpdump -n -w data.pcap
Spezielles Signal senden #
Wenn kein Signal gegeben wird, timeout
sendet den SIGTERM
Signal an den verwalteten Befehl, wenn das Zeitlimit erreicht ist. Mit dem -s
können Sie angeben, welches Signal gesendet werden soll (--signal
)-Option.
Zum Beispiel, um SIGKILL
zu senden zum ping
Befehl nach einer Minute würden Sie verwenden:
sudo timeout -s SIGKILL ping 8.8.8.8
Sie können das Signal anhand des Namens angeben, z. B. SIGKILL
, oder seine Nummer 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 kill -l
Befehl:
kill -l
Festgefahrene Prozesse beenden #
SIGTERM
, das Standardsignal, das gesendet wird, wenn das Zeitlimit überschritten wird, kann von einigen Prozessen abgefangen oder ignoriert werden. In diesen Situationen läuft der Prozess weiter, nachdem das Beendigungssignal gesendet wurde.
Um sicherzustellen, dass der überwachte Befehl beendet wird, verwenden Sie -k
(--kill-after
) Option gefolgt von einem Zeitraum. Wenn diese Option verwendet wird, nachdem das angegebene Zeitlimit erreicht ist, wird das timeout
Befehl sendet den SIGKILL
Signal an das verwaltete Programm, das nicht abgefangen oder ignoriert werden kann.
Im folgenden Beispiel timeout
führt den Befehl eine Minute lang aus, und wenn er nicht beendet wird, beendet er ihn nach zehn Sekunden:
sudo timeout -k 10 1m ping 8.8.8.8
timeout -k „./test.sh“
getötet, nachdem das angegebene Zeitlimit erreicht ist
Beibehalten des Exit-Status #
timeout
gibt 124
zurück wenn das Zeitlimit erreicht ist. Andernfalls wird der Exit-Status des verwalteten Befehls zurückgegeben.
Verwenden Sie --preserve-status
, um den Beendigungsstatus des Befehls auch dann zurückzugeben, wenn das Zeitlimit erreicht ist Möglichkeit:
timeout --preserve-status 5 ping 8.8.8.8
Im Vordergrund laufen #
Standardmäßig timeout
führt den verwalteten Befehl im Hintergrund aus. Wenn Sie den Befehl im Vordergrund ausführen möchten, verwenden Sie --foreground
Möglichkeit:
timeout --foreground 5m ./script.sh
Diese Option ist nützlich, wenn Sie einen interaktiven Befehl ausführen möchten, der eine Benutzereingabe erfordert.
Schlussfolgerung #
Das timeout
Befehl wird verwendet, um einen bestimmten Befehl mit einem Zeitlimit auszuführen.
timeout
ist ein einfacher Befehl, der nicht viele Optionen hat. Normalerweise rufen Sie timeout
auf nur mit zwei Argumenten, der Dauer und dem verwalteten Befehl.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.