Timeout: Unterschied zwischen den Versionen
Zeile 32: | Zeile 32: | ||
== Anwendung == | == Anwendung == | ||
<syntaxhighlight lang="bash" highlight="1" line copy> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
< /syntaxhighlight> | </syntaxhighlight> | ||
=== Problembehebung === | === Problembehebung === |
Version vom 5. September 2025, 10:33 Uhr
Timeout - Beschreibung
Beschreibung
Installation
Aufruf
Optionen
Unix | GNU | Parameter | Beschreibung |
---|---|---|---|
Parameter
Umgebungsvariablen
Exit-Status
Wert | Beschreibung |
---|---|
0 | Erfolg |
>0 | Fehler |
Anwendung
Problembehebung
Konfiguration
Dateien
Datei | Beschreibung |
---|---|
Anhang
Siehe auch
Dokumentation
- Man-Page
Links
Projekt
Weblinks
TMP
timeout: Einen Befehl mit Zeitlimit ausführen
timeout
führt den angegebenen Befehl aus und beendet ihn, wenn er nach Ablauf der angegebenen Zeitspanne noch läuft. Übersicht:
timeout [Option] Dauer Befehl [Argument]...
Befehl darf kein spezielles integriertes Dienstprogramm sein (siehe Spezielle integrierte Dienstprogramme).
Das Programm akzeptiert die folgenden Optionen. Siehe auch Allgemeine Optionen. Optionen müssen vor Operanden stehen.
- „-f“
- „--foreground“
- Es wird keine separate Hintergrundprogrammgruppe erstellt, sodass der verwaltete Befehl das Vordergrund-TTY normal verwenden kann. Dies ist erforderlich, um zwei Situationen beim Zeitüberschreiten von Befehlen zu unterstützen, wenn
timeout
nicht von einer interaktiven Shell aufgerufen wird.- Befehl ist interaktiv und muss beispielsweise vom Terminal lesen
- Der Benutzer möchte das Senden von Signalen direkt vom Terminal an Befehl unterstützen (z. B. Strg-C). In diesem Betriebsmodus wird für keine untergeordneten Prozesse von Befehl ein Zeitlimit festgelegt. Außerdem wird SIGCONT nicht an Befehl gesendet, da dies bei Vordergrundprozessen in der Regel nicht erforderlich ist und zu zeitweiligen Problemen bei der Signalübermittlung mit Programmen führen kann, die selbst Monitore sind (wie beispielsweise GDB).
- ‘-k Dauer’
- ‘--kill-after=Dauer’
- Stellen Sie sicher, dass der überwachte Befehl durch Senden eines „KILL”-Signals beendet wird. Die angegebene Dauer beginnt zu dem Zeitpunkt, zu dem
timeout
das erste Signal an Befehl sendet, d. h. nicht zu Beginn, wenn der Befehl gestartet wird. Diese Option hat keine Wirkung, wenn entweder die Hauptoption duration des Befehlstimeout
oder die für diese Option angegebene Option duration den Wert 0 hat. Diese Option kann nützlich sein, wenn das ausgewählte Signal den Befehl nicht beendet hat, entweder weil das Signal blockiert oder ignoriert wurde oder weil der Befehl zu lange braucht (z. B. für Aufräumarbeiten), um sich innerhalb einer bestimmten Zeit selbst zu beenden. - „-p“
- „--preserve-status“
- Gibt bei Zeitüberschreitung den Exit-Status des verwalteten Befehls zurück, anstatt einen bestimmten Exit-Status, der eine Zeitüberschreitung anzeigt. Dies ist nützlich, wenn der verwaltete Befehl die Ausführung für eine unbestimmte Zeit unterstützt.
- „-s signal“
- „--signal=signal“
- Sendet dieses signal bei Zeitüberschreitung an command anstelle des Standard-Signals „TERM“. signal kann ein Name wie „HUP“ oder eine Zahl sein. Siehe Signal-Spezifikationen.
- „-v“
- „--verbose“
- Diagnose bei Standardfehler, jedes bei Zeitüberschreitung gesendete Signal.
duration ist eine Gleitkommazahl entweder in der aktuellen oder der C-Locale (siehe Gleitkommazahlen), gefolgt von einer optionalen Einheit: ‘s’ für Sekunden (Standard) ‘m’ für Minuten „h“ für Stunden „d“ für Tage Eine Hexadezimalzahl kann nur dann vor einem Suffix „d“ stehen, wenn die Zahl einen Exponenten im Stil „p“ hat, z. B. bedeutet „0x1p0d“ einen Tag. Eine Dauer von 0 deaktiviert das zugehörige Timeout. Die tatsächliche Timeout-Dauer hängt von den Systembedingungen ab, was insbesondere bei der Angabe von Timeouts im Subsekundenbereich berücksichtigt werden sollte.
Exit-Status:
124, wenn Befehl zeitlich begrenzt ist und --preserve-status nicht angegeben ist
125, wenn timeout
selbst fehlschlägt
126, wenn Befehl gefunden wird, aber nicht aufgerufen werden kann
127, wenn Befehl nicht gefunden werden kann
137, wenn Befehl oder timeout
das KILL(9)-Signal (128+9) gesendet wird
ansonsten der Exit-Status von Befehl
Im Falle des Signals „KILL(9)“ gibt timeout
den Exit-Status 137 zurück, unabhängig davon, ob dieses Signal an command oder an timeout
selbst gesendet wird, d. h., diese Fälle können nicht unterschieden werden. Im letzteren Fall kann der Prozess Befehl nach der erzwungenen Beendigung von timeout
noch aktiv sein.
Beispiele:
- Sende nach 20 Sekunden das Standard-TERM-Signal an ein kurzlebiges „sleep 1”.
- Da dies lange vor Ablauf der angegebenen Dauer beendet wird, kehrt „timeout”
- mit dem gleichen Exit-Status wie der Befehl zurück, in diesem Fall 0.
timeout 20 sleep 1
- Sende das INT-Signal nach 5 Sekunden an den Befehl „sleep”. Gibt nach
- 5 Sekunden den Exit-Status 124 zurück, um das Senden des Signals anzuzeigen.
timeout -s INT 5 sleep 20
- Ebenso, aber der Befehl ignoriert das INT-Signal, da er
- über „env --ignore-signal” gestartet wurde. Somit wird „sleep” nach
- den vollen 20 Sekunden regulär beendet, „timeout” kehrt jedoch mit dem Exit-Status 124 zurück.
timeout -s INT 5s env --ignore-signal=INT sleep 20
- Ebenso, jedoch wird das KILL-Signal 3 Sekunden nach dem ursprünglichen
- INT-Signal. Daher wird „sleep” nach etwa
- 8 Sekunden (5+3) zwangsweise beendet und „timeout” kehrt mit dem Exit-Status 137 zurück.
timeout -s INT -k 3s 5s env --ignore-signal=INT sleep 20