timeout
je nástroj příkazového řádku, který spouští zadaný příkaz a ukončí jej, pokud je po určité době stále spuštěn. Jinými slovy, timeout
umožňuje spustit příkaz s časovým limitem. timeout
command je součástí balíku GNU core utilities, který je nainstalován na téměř každé distribuci Linuxu.
Je to užitečné, když chcete spustit příkaz, který nemá vestavěnou možnost časového limitu.
V tomto článku vysvětlíme, jak používat Linux timeout
příkaz.
Jak používat timeout
Příkaz #
Syntaxe pro timeout
příkaz je následující:
timeout [OPTIONS] DURATION COMMAND [ARG]…
DURATION
může být kladné celé číslo nebo číslo s plovoucí desetinnou čárkou následované volitelnou příponou jednotky:
s
- sekund (výchozí)m
- minutyh
- hodind
- dny
Pokud není použita žádná jednotka, výchozí nastavení jsou sekundy. Pokud je doba trvání nastavena na nulu, související časový limit je deaktivován.
Možnosti příkazu musí být uvedeny před argumenty.
Zde je několik základních příkladů demonstrujících, jak používat timeout
příkaz:
-
Ukončete příkaz po pěti sekundách:
timeout 5 ping 8.8.8.8
-
Ukončete příkaz po pěti minutách:
timeout 5m ping 8.8.8.8
-
Ukončete příkaz po jedné minutě a šesti sekundách:
timeout 1.1m ping 8.8.8.8
Pokud chcete spustit příkaz, který vyžaduje zvýšená oprávnění, jako je tcpdump
, přidejte před sudo
před timeout
:
sudo timeout 300 tcpdump -n -w data.pcap
Odesílání specifického signálu #
Pokud není dán žádný signál, timeout
odešle SIGTERM
signál do řízeného příkazu, když je dosaženo časového limitu. Pomocí -s
můžete určit, který signál se má odeslat (--signal
).
Například pro odeslání SIGKILL
na ping
po jedné minutě byste použili:
sudo timeout -s SIGKILL ping 8.8.8.8
Signál můžete specifikovat názvem, například SIGKILL
, nebo jeho číslo jako 9
. Následující příkaz je identický s předchozím:
sudo timeout -s 9 ping 8.8.8.8
Chcete-li získat seznam všech dostupných signálů, použijte kill -l
příkaz:
kill -l
Zabíjení zaseknutých procesů #
SIGTERM
, výchozí signál odeslaný při překročení časového limitu může být některými procesy zachycen nebo ignorován. V těchto situacích proces pokračuje v běhu po odeslání signálu ukončení.
Chcete-li se ujistit, že monitorovaný příkaz je ukončen, použijte -k
(--kill-after
) možnost následovaná časovým obdobím. Když je tato možnost použita po dosažení daného časového limitu, timeout
příkaz odešle SIGKILL
signál do spravovaného programu, který nelze zachytit ani ignorovat.
V následujícím příkladu timeout
spustí příkaz po dobu jedné minuty, a pokud není ukončen, po deseti sekundách jej ukončí:
sudo timeout -k 10 1m ping 8.8.8.8
timeout -k "./test.sh"
zabit po dosažení daného časového limitu
Zachování stavu ukončení #
timeout
vrátí 124
po dosažení časového limitu. V opačném případě vrátí stav ukončení spravovaného příkazu.
Chcete-li vrátit stav ukončení příkazu i po dosažení časového limitu, použijte --preserve-status
možnost:
timeout --preserve-status 5 ping 8.8.8.8
Běží v popředí #
Ve výchozím nastavení timeout
spustí spravovaný příkaz na pozadí. Pokud chcete příkaz spustit na popředí, použijte --foreground
možnost:
timeout --foreground 5m ./script.sh
Tato možnost je užitečná, když chcete spustit interaktivní příkaz, který vyžaduje vstup uživatele.
Závěr č.
timeout
příkaz se používá ke spuštění daného příkazu s časovým limitem.
timeout
je jednoduchý příkaz, který nemá mnoho možností. Obvykle vyvoláte timeout
pouze se dvěma argumenty, délkou trvání a spravovaným příkazem.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.