Příkaz timeout je nástroj příkazového řádku, který provádí zadaný příkaz a zastaví jej, pokud je po určité době stále spuštěn. Jinými slovy, příkaz timeout umožňuje spustit příkaz s časovým limitem, který určíte. Příkaz timeout je součástí základního balíčku GNU utility, který je nainstalován na téměř všech distribucích Linuxu.
Tento příkaz je užitečný, když chcete spustit příkaz, který nemá vestavěnou možnost časového limitu, nebo chcete zastavit proces po určité době běhu.
V tomto článku si vysvětlíme, jak používat příkazy timeout v terminálu Linux.
Jak používat příkaz Timeout
Syntaxe příkazu timeout 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– sekundy (sekundy) (toto je výchozí možnost)m– minuty (minuty)h– hodiny (hodiny)d– dny (dny)
Pokud nejsou použity žádné jednotky, výchozí nastavení jsou sekundy. Pokud je doba trvání nastavena na nulu, související časový limit je deaktivován.
Před argumentem musí být uvedeny možnosti příkazu.
Zde je několik základních příkladů, jak používat příkaz timeout :
- Zastavte příkaz
pingpo pěti sekundách::timeout 5 ping 8.8.8.8 - Zastavte příkaz po pěti minutách:timeout 5m ping 8.8.8.8
- Zastavte příkaz po jedné minutě a šesti sekundách:timeout 1,1 m ping 8.8.8.8
Pokud chcete spustit příkaz, který vyžaduje oprávnění jako tcpdump , přidejte předponu sudo před příkazem timeout :
sudo timeout 300 tcpdump -n -w data.pcap
Odesílání specifických signálů
Pokud není dán žádný signál, timeout po dosažení časového limitu použije signál SIGTERM na zadaný příkaz. Pomocí -s můžete určit, který signál se má použít ( --signal ) možnost .
Chcete-li například odeslat SIGKILL na příkaz ping po jedné minutě můžete použít příkaz:
sudo timeout -s SIGKILL ping 8.8.8.8
Signál může být specifikován jeho jménem jako SIGKILL nebo čí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 příkaz kill -l :
kill -l
Zabijte zaseknutý 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 takovém případě proces pokračuje v běhu po odeslání signálu ukončení.
Chcete-li se ujistit, že se monitorovaný příkaz zastavil, použijte volbu -k ( --kill-after ) následuje časové období. Při použití této volby po dosažení daného časového limitu se spustí příkaz timeout vyšle signál SIGKILL na program odpovídající zadání uživatele.
V následujícím příkladu je to timeout spustí příkaz po dobu jedné minuty, a pokud nebude ukončen, po deseti sekundách „zabije“ program:
sudo timeout -k 10 1m ping 8.8.8.8
timeout -k “./test.sh”
Proces bude po dosažení daného časového limitu ukončen, i když se zasekl.
Zachování stavu ukončení
timeout vrátí 124 po dosažení časového limitu. Jinak příkaz timeout vrátí stav ukončení spravovaného příkazu.
Chcete-li vrátit stav ukončení příkazu, i když vypršel časový limit, použijte volbu --preserve-status :
timeout --preserve-status 5 ping 8.8.8.8
Spouštění příkazů v popředí
Ve výchozím nastavení timeout spustí příkaz na pozadí. Pokud chcete spustit příkaz v popředí, použijte volbu --foreground :
timeout --foreground 5m ./script.sh
Tato možnost je užitečná, když chcete spouštět interaktivní příkazy, které vyžadují vstup uživatele.
Závěr
Příkaz je timeout slouží ke spuštění určitého příkazu s časovým limitem podle vůle uživatele.
Příkazy timeout jsou jednoduché příkazy, které nemají mnoho možností. Obvykle použijete příkaz timeout pouze se dvěma argumenty, trváním a příkazem, který se objeví.