Android

Jak spouštět linuxové příkazy na pozadí

Writing 2D Games in C using SDL by Thomas Lively

Writing 2D Games in C using SDL by Thomas Lively

Obsah:

Anonim

Obvykle, když spustíte příkaz v terminálu, musíte počkat, až se příkaz dokončí, než můžete zadat další příkaz. Říká se tomu spuštění příkazu v popředí nebo v popředí. Když je proces spuštěn v popředí, zabírá váš shell a můžete s ním komunikovat pomocí vstupních zařízení.

Co když příkaz trvá dlouho a chcete mezitím spouštět další příkazy? Máte k dispozici několik možností. Nejviditelnější a nejjednodušší možnost je spustit novou relaci prostředí 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 zásahu uživatele., budeme hovořit o procesech na pozadí je Linux. Ukážeme vám, jak spustit příkaz na pozadí a jak udržet proces spuštěný i po ukončení relace shellu.

Spusťte linuxový příkaz na pozadí

Chcete-li spustit příkaz na pozadí, přidejte na konec příkazu symbol ampersand ( & ):

command &

Na terminálu bude vytištěno ID úlohy shellu (obklopené závorkami) a ID procesu:

25177

Na pozadí můžete mít spuštěno více procesů současně.

Proces na pozadí bude pokračovat v psaní zpráv na terminál, ze kterého jste vyvolali příkaz. Chcete-li potlačit zprávy stdout a stderr použijte následující syntaxi:

command > /dev/null 2>&1 &

>/dev/null 2>&1 znamená přesměrování stdout do /dev/null a stderr do stdout .

Pomocí obslužného programu jobs zobrazíte stav všech zastavených úloh a úloh na pozadí v aktuální relaci prostředí:

jobs -l

Výstup obsahuje číslo úlohy, ID procesu, stav úlohy a příkaz, který úlohu spustil:

+ 25177 Running ping google.com &

Chcete-li do popředí přivést proces na pozadí, použijte příkaz fg :

fg

fg %1

Chcete-li ukončit proces na pozadí, použijte příkaz kill následovaný ID procesu:

kill -9 25177

Přesunout proces popředí na pozadí

Postup přesunutí běžícího procesu v popředí na pozadí:

  1. Zastavte proces zadáním Ctrl+Z Zastavte proces na pozadí zadáním bg .

Udržujte procesy na pozadí spuštěné i po ukončení prostředí

Pokud vaše připojení klesne nebo se odhlásíte z relace prostředí, procesy na pozadí jsou ukončeny. Existuje několik způsobů, jak udržet proces spuštěný i po ukončení interaktivní relace prostředí.

Jedním ze způsobů je odebrání úlohy z řízení úlohy shellu pomocí vestavěného shellu shellu:

disown

disown %1

Potvrďte, že úloha je odstraněna z tabulky aktivních úloh pomocí příkazu jobs -l . Chcete-li vypsat všechny spuštěné procesy, včetně disowned, použijte příkaz ps aux .

Dalším způsobem, jak udržet proces spuštěný po ukončení shellu, je použít nohup .

Příkaz nohup provede jiný program určený jako jeho argument a ignoruje všechny signály SIGHUP (hangup). SIGHUP je signál, který je odeslán do procesu, když je jeho ovládací terminál uzavřen.

Chcete-li spustit příkaz na pozadí pomocí příkazu nohup , zadejte:

nohup command &

Výstup příkazu je přesměrován do souboru nohup.out .

nohup: ignoring input and appending output to 'nohup.out'

Alternativy

Existuje celá řada programů, které vám umožní mít více interaktivních relací současně.

Obrazovka

Obrazovka nebo GNU Obrazovka je terminálový multiplexerový program, který vám umožní spustit relaci obrazovky a otevřít libovolný počet oken (virtuálních terminálů) uvnitř této relace. Procesy spuštěné na obrazovce se budou nadále zobrazovat, i když se jejich okno nezobrazí, i když se odpojíte.

Tmux

Tmux je moderní alternativa k GNU obrazovce. S Tmux můžete také vytvořit relaci a otevřít v ní více oken. Relace Tmux jsou trvalé, což znamená, že programy spuštěné v Tmuxu budou pokračovat, i když zavřete terminál.

Závěr

Chcete-li spustit příkaz na pozadí, zadejte na konec příkazu &.

Když spustíte příkaz na pozadí, nemusíte čekat, dokud nedokončí, než budete moci provést další.

zakázka terminálu