GNU/Linux >> Znalost Linux >  >> Linux

Jak spouštět příkazy Linuxu na pozadí

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í:

  1. Zastavte proces stisknutím Ctrl+Z .
  2. 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ář.


Linux
  1. Jak omezit uživatelské příkazy v Linuxu

  2. linux:jak spustit příkaz v daném adresáři

  3. Jak mohu zaznamenat příkazy Linuxu?

  1. Jak používat Su Command v Linuxu

  2. Spouštění příkazů Linuxu na pozadí a v popředí

  3. Linuxové příkazy od A do Z

  1. Jak spustit příkaz s časovým limitem (Timeout) v Linuxu

  2. Linuxový příkaz echo

  3. Jak spustit skript na pozadí (linux openwrt)?