Naučte se, jak správně spouštět podshely pomocí skriptů Bash

Jak instruovat podsvětí, aby běhly v pozadí paralelně

Shell je základní rozhraní pro zadávání příkazů v systému Linux. S ním můžete přímo zadat příkaz nebo zadat soubor (skript), který obsahuje sekvenci příkazů, které mají být provedeny. Shells jsou uspořádány v hierarchii a každý shell může vytvořit nový shell. Nový shell je považován za podřízený proces - podsvícený - nadřazený shell, který ho vytváří.

Ve výchozím nastavení je subshell závislý na jeho nadřazeném objektu v tom smyslu, že pokud rodičovský proces ukončí, subshell je také ukončen. Každý výstup je předán z podsvuku do nadřazeného shellu.

Jak vytvořit podshell

Ve skriptu Bash shellu vytvoříte podklíč pomocí závorky:

"# count / 1/99" echo "# count" spánek 1 ((count ++))) echo "Finished"

V příkladu cyklu while je uzavřena v závorce, což způsobí, že bude provedena v podsvuku prostředí, ve kterém je spuštěn soubor skriptu.

Spuštění podsvuku v pozadí

Pokud nezadáte, že má být subshell proveden na pozadí, rodičovský shell čeká na ukončení podsveti před dalším pokračováním skriptu. Pokud však chcete spustit subshells paralelně, spustíte je na pozadí, což je provedeno znakem ampersand následujícího výrazu subshell, jak je zde zobrazeno:

# count / l / bash echo "Před spuštěním subshell" (count = 1 zatímco [$ count -le 99] do echo "$ count" spánku 1 ((count ++)) & echo "Finished"

Spouštění více dílčích skořepin v paralelním režimu

Pokud vytvoříte více podsvete jako procesy na pozadí, můžete spustit úkoly paralelně. Operační systém obvykle používá různé procesory nebo jádra pro každý proces a dílčí proces, za předpokladu, že existuje nejméně tolik procesorů nebo jader jako procesy. V opačném případě jsou úkoly přiřazeny stejným procesorům nebo jádrům. V takovém případě procesor nebo jádro nepřetržitě přepíná mezi přiřazenými úlohami, dokud nejsou úkoly dokončeny. Další příklad má dva podprocesy. První se počítá od 1 do 99 a druhá od 1000 do 1099.

(count = 1, zatímco [$ count -le 99] dělá echo "$ count" spánek 1 ((count ++)) & (count = 1000 zatímco [$ count -le 1099] do echo "$ count" spánek 1 ((count ++)) done) & echo "Finished"

Použijte příkaz wait, aby rodičovský proces počkal, než čeká dokončení podprocesů, než pokračuje se zbytkem skriptu:

(count = 1, zatímco [$ count -le 99] dělá echo "$ count" spánek 1 ((count ++)) & (count = 1000 zatímco [$ count -le 1099] echo "$ count" spánek 1 ((count ++)) done & wait echo "Finished"

Používá se pro dílčí skořepiny

Návrhy jsou užitečné, když je třeba provést příkazy v konkrétním prostředí nebo adresáři. Pokud je každý příkaz spuštěn v jiném podsvuku, neexistuje riziko, že se proměnné nastavení zaměňují. Po dokončení nastavení a aktuální adresář není nutné obnovit, protože prostředí rodičovského procesu není ovlivněno žádným z jeho podprocesů.

V definicích funkcí lze použít dílčí skořepiny tak, aby mohly být prováděny vícekrát s různými parametry.