nohup
příkaz spustí jiný program zadaný jako jeho argument a ignoruje všechny SIGHUP
(zavěšení) signály. SIGHUP
je signál, který je odeslán do procesu, když je jeho řídicí terminál uzavřen.
Obvykle, když spustíte program přes SSH, pokud vaše připojení přestane fungovat nebo se odhlásíte, relace se ukončí a všechny procesy prováděné z terminálu se zastaví. Zde se nachází nohup
příkaz přijde vhod. Ignoruje všechny signály zavěšení a proces bude pokračovat.
Jak používat příkaz nohup #
Syntaxe pro nohup
příkaz je následující:
nohup COMMAND [ARGS]
Příkaz nepřijímá žádné další možnosti kromě standardního --help
a --version
.
Podívejme se na následující příklad:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
spustí mycommand
příkaz v popředí a přesměruje výstup příkazu na nohup.out
soubor. Tento soubor je vytvořen v aktuálním pracovním adresáři. Pokud uživatel spouštějící příkaz nemá oprávnění k zápisu do pracovního adresáře, soubor se vytvoří v domovském adresáři uživatele.
Pokud se odhlásíte nebo zavřete terminál, proces nebude ukončen.
Spuštění příkazu na pozadí #
Pomocí nohup
v popředí není příliš užitečné, protože nebudete moci komunikovat s shellem, dokud nebude příkaz dokončen.
Chcete-li příkaz spustit na pozadí, připojte &
symbol na konci příkazu:
nohup mycommand &
Výstup obsahuje ID úlohy prostředí (ohraničené závorkami) a ID procesu:
[1] 25177
Pomocí ID úlohy můžete přenést příkaz do popředí pomocí fg
příkaz.
Pokud z nějakého důvodu chcete proces ukončit, použijte kill
příkaz následovaný ID procesu:
kill -9 25132
Přesměrování výstupu do souboru #
Ve výchozím nastavení nohup
přesměruje výstup příkazu na nohup.out
soubor. Pokud chcete přesměrovat výstup do jiného souboru, použijte standardní přesměrování shellu.
Například pro přesměrování standardního výstupu a standardní chyby do mycommand.out
byste použili:
nohup mycommand > mycommand.out 2>&1 &
Chcete-li přesměrovat standardní výstup a standardní chybu do jiných souborů:
nohup mycommand > mycommand.out 2> mycommand.err &
Alternativy #
Existuje několik alternativních programů, které můžete použít, abyste zabránili ukončení příkazu při zavření terminálu nebo odpojení.
Obrazovka #
Screenor GNU Screen je program terminálového multiplexeru, který vám umožňuje spustit relaci obrazovky a otevřít libovolný počet oken (virtuálních terminálů) uvnitř této relace. Procesy běžící na obrazovce budou pokračovat, když jejich okno nebude viditelné, i když budete odpojeni.
Tmux #
Tmuxi je moderní alternativa k obrazovce GNU. Pomocí Tmux můžete také vytvořit relaci a otevřít v ní více oken. Relace Tmux jsou trvalé, což znamená, že programy běžící v Tmux budou pokračovat v běhu, i když zavřete terminál.
Odmítnout #
disown
je vestavěný shell, který odstraňuje úlohu shellu z ovládání úlohy shellu. Na rozdíl od nohup
, můžete použít disown
i na běžících procesech.
Závěr č.
nohup
umožňuje zabránit ukončení příkazů, když se odhlásíte nebo opustíte terminál.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.