Zum Inhalt springen

Timeout: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
=== timeout: Run a command with a time limit ===
=== timeout: Einen Befehl mit Zeitlimit ausführen ===
<code>timeout</code> runs the given <var>command</var> and kills it if it is still running after the specified time interval. Synopsis:
<code>timeout</code> führt den angegebenen <var>Befehl</var> aus und beendet ihn, wenn er nach Ablauf der angegebenen Zeitspanne noch läuft. Übersicht:
timeout [<var>option</var>] <var>duration</var> <var>command</var> [<var>arg</var>]...
timeout [<var>Option</var>] <var>Dauer</var> <var>Befehl</var> [<var>Argument</var>]...
<var>command</var> must not be a special built-in utility (see Special built-in utilities).
<var>Befehl</var> darf kein spezielles integriertes Dienstprogramm sein (siehe Spezielle integrierte Dienstprogramme).


The program accepts the following options. Also see Common options. Options must precede operands.
Das Programm akzeptiert die folgenden Optionen. Siehe auch Allgemeine Optionen. Optionen müssen vor Operanden stehen.


; <samp>-f</samp>
; <samp>-f</samp>
; <samp>--foreground</samp>
; <samp>--foreground</samp>
: Don’t create a separate background program group, so that the managed <var>command</var> can use the foreground TTY normally. This is needed to support two situations when timing out commands, when not invoking <code>timeout</code> from an interactive shell.
: Es wird keine separate Hintergrundprogrammgruppe erstellt, sodass der verwaltete <var>Befehl</var> das Vordergrund-TTY normal verwenden kann. Dies ist erforderlich, um zwei Situationen beim Zeitüberschreiten von Befehlen zu unterstützen, wenn <code>timeout</code> nicht von einer interaktiven Shell aufgerufen wird.
:# <var>command</var> is interactive and needs to read from the terminal for example
:# <var>Befehl</var> ist interaktiv und muss beispielsweise vom Terminal lesen
:# the user wants to support sending signals directly to <var>command</var> from the terminal (like Ctrl-C for example) In this mode of operation, any children of <var>command</var> will not be timed out. Also SIGCONT will not be sent to <var>command</var>, as it’s generally not needed with foreground processes, and can cause intermittent signal delivery issues with programs that are monitors themselves (like GDB for example).
:# Der Benutzer möchte das Senden von Signalen direkt vom Terminal an <var>Befehl</var> unterstützen (z. B. Strg-C). In diesem Betriebsmodus wird für keine untergeordneten Prozesse von <var>Befehl</var> ein Zeitlimit festgelegt. Außerdem wird SIGCONT nicht an <var>Befehl</var> 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).
; ‘<samp>-k <var>duration</var></samp>’
; ‘<samp>-k <var>Dauer</var></samp>’
; ‘<samp>--kill-after=<var>duration</var></samp>’
; ‘<samp>--kill-after=<var>Dauer</var></samp>’
: Ensure the monitored <var>command</var> is killed by also sending a ‘<samp>KILL</samp>’ signal. The specified <var>duration</var> starts from the point in time when <code>timeout</code> sends the initial signal to <var>command</var>, i.e., not from the beginning when the <var>command</var> is started. This option has no effect if either the main <var>duration</var> of the <code>timeout</code> command, or the <var>duration</var> specified to this option, is 0. This option may be useful if the selected signal did not kill the <var>command</var>, either because the signal was blocked or ignored, or if the <var>command</var> takes too long (e.g. for cleanup work) to terminate itself within a certain amount of time.
: Stellen Sie sicher, dass der überwachte <var>Befehl</var> durch Senden eines „<samp>KILL</samp>”-Signals beendet wird. Die angegebene <var>Dauer</var> beginnt zu dem Zeitpunkt, zu dem <code>timeout</code> das erste Signal an <var>Befehl</var> sendet, d. h. nicht zu Beginn, wenn der <var>Befehl</var> gestartet wird. Diese Option hat keine Wirkung, wenn entweder die Hauptoption <var>duration</var> des Befehls <code>timeout</code> oder die für diese Option angegebene Option <var>duration</var> den Wert 0 hat. Diese Option kann nützlich sein, wenn das ausgewählte Signal den <var>Befehl</var> nicht beendet hat, entweder weil das Signal blockiert oder ignoriert wurde oder weil der <var>Befehl</var> zu lange braucht (z. B. für Aufräumarbeiten), um sich innerhalb einer bestimmten Zeit selbst zu beenden.
; <samp>-p</samp>
; <samp>-p</samp>
; <samp>--preserve-status</samp>
; <samp>--preserve-status</samp>
: Return the exit status of the managed <var>command</var> on timeout, rather than a specific exit status indicating a timeout. This is useful if the managed <var>command</var> supports running for an indeterminate amount of time.
: Gibt bei Zeitüberschreitung den Exit-Status des verwalteten <var>Befehls</var> zurück, anstatt einen bestimmten Exit-Status, der eine Zeitüberschreitung anzeigt. Dies ist nützlich, wenn der verwaltete <var>Befehl</var> die Ausführung für eine unbestimmte Zeit unterstützt.
; <samp>-s <var>signal</var></samp>
; <samp>-s <var>signal</var></samp>
; <samp>--signal=<var>signal</var></samp>
; <samp>--signal=<var>signal</var></samp>
: Send this <var>signal</var> to <var>command</var> on timeout, rather than the default ‘<samp>TERM</samp>’ signal. <var>signal</var> may be a name like ‘<samp>HUP</samp>’ or a number. See Signal specifications.
: Sendet dieses <var>signal</var> bei Zeitüberschreitung an <var>command</var> anstelle des Standard-Signals „<samp>TERM</samp>. <var>signal</var> kann ein Name wie „<samp>HUP</samp>“ oder eine Zahl sein. Siehe Signal-Spezifikationen.
; <samp>-v</samp>
; <samp>-v</samp>
; <samp>--verbose</samp>
; <samp>--verbose</samp>
: Diagnose to standard error, any signal sent upon timeout.
: Diagnose bei Standardfehler, jedes bei Zeitüberschreitung gesendete Signal.


<var>duration</var> is a floating point number in either the current or the C locale (see Floating point numbers) followed by an optional unit:
<var>duration</var> ist eine Gleitkommazahl entweder in der aktuellen oder der C-Locale (siehe Gleitkommazahlen), gefolgt von einer optionalen Einheit:
‘<samp>s</samp>’ for seconds (the default)
‘<samp>s</samp>’ für Sekunden (Standard)
‘<samp>m</samp>’ for minutes
‘<samp>m</samp>’ für Minuten
<samp>h</samp>’ for hours
<samp>h</samp>“ für Stunden
<samp>d</samp>’ for days
<samp>d</samp>“ für Tage
A hexadecimal number can precede a ‘<samp>d</samp>’ suffix only if the number has a ‘<samp>p</samp>’ style exponent, e.g., ‘<samp>0x1p0d</samp>’ means one day. A duration of 0 disables the associated timeout. The actual timeout duration is dependent on system conditions, which should be especially considered when specifying sub-second timeouts.
Eine Hexadezimalzahl kann nur dann vor einem Suffix „<samp>d</samp>“ stehen, wenn die Zahl einen Exponenten im Stil „<samp>p</samp>“ hat, z. B. bedeutet „<samp>0x1p0d</samp>“ 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:
Exit-Status:
124 if <var>command</var> times out, and <samp>--preserve-status</samp> is not specified
124, wenn <var>Befehl</var> zeitlich begrenzt ist und <samp>--preserve-status</samp> nicht angegeben ist
125 if <code>timeout</code> itself fails
125, wenn <code>timeout</code> selbst fehlschlägt
126 if <var>command</var> is found but cannot be invoked
126, wenn <var>Befehl</var> gefunden wird, aber nicht aufgerufen werden kann
127 if <var>command</var> cannot be found
127, wenn <var>Befehl</var> nicht gefunden werden kann
137 if <var>command</var> or <code>timeout</code> is sent the KILL(9) signal (128+9)
137, wenn <var>Befehl</var> oder <code>timeout</code> das KILL(9)-Signal (128+9) gesendet wird
the exit status of <var>command</var> otherwise
ansonsten der Exit-Status von <var>Befehl</var>
In the case of the ‘<samp>KILL(9)</samp>’ signal, <code>timeout</code> returns with exit status 137, regardless of whether that signal is sent to <var>command</var> or to <code>timeout</code> itself, i.e., these cases cannot be distinguished. In the latter case, the <var>command</var> process may still be alive after <code>timeout</code> has forcefully been terminated.
Im Falle des Signals „<samp>KILL(9)</samp>“ gibt <code>timeout</code> den Exit-Status 137 zurück, unabhängig davon, ob dieses Signal an <var>command</var> oder an <code>timeout</code> selbst gesendet wird, d. h., diese Fälle können nicht unterschieden werden. Im letzteren Fall kann der Prozess <var>Befehl</var> nach der erzwungenen Beendigung von <code>timeout</code> noch aktiv sein.


Examples:
Beispiele:
# Send the default TERM signal after 20s to a short-living 'sleep 1'.
# Sende nach 20 Sekunden das Standard-TERM-Signal an ein kurzlebiges „sleep 1”.
# As that terminates long before the given duration, 'timeout' returns
# Da dies lange vor Ablauf der angegebenen Dauer beendet wird, kehrt „timeout”
# with the same exit status as the command, 0 in this case.
# mit dem gleichen Exit-Status wie der Befehl zurück, in diesem Fall 0.
timeout 20 sleep 1
timeout 20 sleep 1
 
# Send the INT signal after 5s to the 'sleep' command. Returns after
# Sende das INT-Signal nach 5 Sekunden an den Befehl „sleep”. Gibt nach
# 5 seconds with exit status 124 to indicate the sending of the signal.
# 5 Sekunden den Exit-Status 124 zurück, um das Senden des Signals anzuzeigen.
timeout -s INT 5 sleep 20
timeout -s INT 5 sleep 20
 
# Likewise, but the command ignoring the INT signal due to being started
# Ebenso, aber der Befehl ignoriert das INT-Signal, da er
# via 'env --ignore-signal'. Thus, 'sleep' terminates regularly after
# über „env --ignore-signal” gestartet wurde. Somit wird „sleep” nach
# the full 20 seconds, still 'timeout' returns with exit status 124.
# 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
timeout -s INT 5s env --ignore-signal=INT sleep 20
 
# Likewise, but sending the KILL signal 3 seconds after the initial
# Ebenso, jedoch wird das KILL-Signal 3 Sekunden nach dem ursprünglichen
# INT signal. Hence, 'sleep' is forcefully terminated after about
# INT-Signal. Daher wird „sleep” nach etwa
# 8 seconds (5+3), and 'timeout' returns with an exit status of 137.
# 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
timeout -s INT -k 3s 5s env --ignore-signal=INT sleep 20


[[Kategorie:Coreutils]]
[[Kategorie:Coreutils]]
[[Kategorie:Linux/Befehl]]
[[Kategorie:Linux/Befehl]]

Version vom 5. September 2025, 10:31 Uhr

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.
  1. Befehl ist interaktiv und muss beispielsweise vom Terminal lesen
  2. 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 Befehls timeout 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:

  1. Sende nach 20 Sekunden das Standard-TERM-Signal an ein kurzlebiges „sleep 1”.
  2. Da dies lange vor Ablauf der angegebenen Dauer beendet wird, kehrt „timeout”
  3. mit dem gleichen Exit-Status wie der Befehl zurück, in diesem Fall 0.

timeout 20 sleep 1

  1. Sende das INT-Signal nach 5 Sekunden an den Befehl „sleep”. Gibt nach
  2. 5 Sekunden den Exit-Status 124 zurück, um das Senden des Signals anzuzeigen.

timeout -s INT 5 sleep 20

  1. Ebenso, aber der Befehl ignoriert das INT-Signal, da er
  2. über „env --ignore-signal” gestartet wurde. Somit wird „sleep” nach
  3. 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

  1. Ebenso, jedoch wird das KILL-Signal 3 Sekunden nach dem ursprünglichen
  2. INT-Signal. Daher wird „sleep” nach etwa
  3. 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