Obvykle, když spustíte příkaz v terminálu, musíte počkat, až příkaz skončí, než budete moci zadat další. To se nazývá spuštění příkazu v popředí nebo procesu na popředí. Když proces běží v popředí, zabírá váš shell a můžete s ním komunikovat pomocí vstupních zařízení.
Co když dokončení příkazu trvá dlouho a vy chcete mezitím spustit jiné příkazy? K dispozici máte několik možností. Nejviditelnější a nejpřímější možností je spustit novou relaci shellu a spustit v ní příkaz. Další možností je spustit příkaz na pozadí.
Proces na pozadí je proces/příkaz, který se spouští z terminálu a běží na pozadí bez interakce uživatele.
V tomto článku budeme hovořit o procesech na pozadí Linuxu. Ukážeme vám, jak spustit příkaz na pozadí a jak udržet proces spuštěný i po zavření shellové relace.
Spustit příkaz Linux na pozadí #
Chcete-li spustit příkaz na pozadí, přidejte symbol ampersand (& ) na konci příkazu:
command &
ID úlohy shellu (v závorkách) a ID procesu budou vytištěny na terminálu:
[1] 25177
Na pozadí můžete mít spuštěno několik procesů současně.
Proces na pozadí bude pokračovat v psaní zpráv na terminál, ze kterého jste příkaz vyvolali. Chcete-li potlačit stdout a stderr zprávy používají následující syntaxi:
command > /dev/null 2>&1 &
>/dev/null 2>&1 znamená přesměrování stdout na /dev/null a stderr na stdout .
Použijte jobs nástroj pro zobrazení stavu všech zastavených úloh a úloh na pozadí v aktuální relaci shellu:
jobs -l Výstup obsahuje číslo úlohy, ID procesu, stav úlohy a příkaz, který úlohu spustil:
[1]+ 25177 Running ping google.com &
Chcete-li přenést proces na pozadí do popředí, použijte fg příkaz:
fg
Pokud máte více úloh na pozadí, zahrňte % a ID úlohy za příkazem:
fg %1
Chcete-li ukončit proces na pozadí, použijte kill příkaz následovaný ID procesu:
kill -9 25177 Přesunout proces v popředí na pozadí #
Přesunutí běžícího procesu v popředí na pozadí:
- Zastavte proces stisknutím
Ctrl+Z. - Přesuňte zastavený proces na pozadí zadáním
bg.
Ponechat procesy na pozadí spuštěné po ukončení shellu #
Pokud vaše připojení přestane fungovat nebo se odhlásíte z relace prostředí, procesy na pozadí se ukončí. Existuje několik způsobů, jak udržet proces spuštěný po skončení relace interaktivního shellu.
Jedním ze způsobů je odstranit úlohu z ovládání úloh prostředí pomocí disown vestavěný shell:
disown
Pokud máte více než jednu úlohu na pozadí, uveďte % a ID úlohy za příkazem:
disown %1
Pomocí jobs -l potvrďte, že je úloha odstraněna z tabulky aktivních úloh příkaz. Chcete-li vypsat všechny běžící procesy, včetně odmítnutých, použijte ps aux příkaz.
Dalším způsobem, jak udržet proces spuštěný po ukončení shellu, je použít nohup .
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.
Spuštění příkazu na pozadí pomocí nohup příkaz, zadejte:
nohup command &
Výstup příkazu je přesměrován na nohup.out soubor.
nohup: ignoring input and appending output to 'nohup.out'
Pokud se odhlásíte nebo zavřete terminál, proces nebude ukončen.
Alternativy #
Existuje řada programů, které vám umožňují mít více interaktivních relací současně.
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 pokračují v běhu, i když zavřete terminál.
Závěr č.
Chcete-li spustit příkaz na pozadí, zahrňte & na konci příkazu.
Když spustíte příkaz na pozadí, nemusíte čekat na jeho dokončení, než budete moci provést další.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.