Skip to main content

Bash Subshells a paralelné spracovanie

Anonim

Plášť je základným rozhraním pre zadávanie príkazov v systéme Linux. Pomocou toho môžete priamo zadávať príkaz alebo špecifikovať súbor (skript), ktorý obsahuje sekvenciu príkazov, ktoré sa majú vykonať. Kocky sú usporiadané v hierarchii a každý shell môže vytvoriť nový shell. Nový shell je považovaný za podradený proces - podsúbka - materského shellu, ktorý ho vytvára.

Štandardne je subshell závislá na jej nadradenej v tom zmysle, že ak rodičovský proces skončí, podsvetie sa tiež ukončí. Každý výstup je odovzdaný z podsúboru do nadradeného shell.

Ako vytvoriť podsúbor

V skripte Bash shellu vytvoríte podkategóriu pomocou zátvorky:

V príklade je cyklus while uzavretý v zátvorkách, čo spôsobuje, že sa vykonáva v podsúbore shell, v ktorom je spustený súbor skriptu.

Spustenie podsúboru na pozadí

Pokiaľ neurčíte, že má byť podsúbka vykonaná na pozadí, rodičovský shell čaká na dokončenie podsveti predtým, ako pokračuje so zvyškom skriptu. Ak však chcete spustiť podsúbory paralelne, spustíte ich na pozadí, čo sa uskutoční pomocou znaku ampersand, ktorý nasleduje po výrazoch subshell, ako je to znázornené na obrázku:

Spúšťanie viacerých podsúčov v paralelnom režime

Ak vytvárate viaceré podsúbory ako procesy na pozadí, môžete spustiť úlohy paralelne. Operačný systém obvykle používa rôzne procesory alebo jadrá pre každý proces a podproces za predpokladu, že existuje aspoň toľko procesorov alebo jadier ako procesy. V opačnom prípade sú úlohy priradené rovnakým procesorom alebo jadrom. V takom prípade procesor alebo jadro nepretržite prepína medzi priradenými úlohami až do dokončenia úloh. Nasledujúci príklad má dve podprocesy. Prvá sa počíta od 1 do 99 a druhá od 1000 do 1099.

Použitie príkazu čakať na oznámenie rodičovského procesu čakať, kým podprocesy skončia, skôr ako budete pokračovať s ostatným skriptom:

Použitie pre podsústavy

Podsystémy sú užitočné, keď je potrebné vykonať príkazy v konkrétnom prostredí alebo adresári. Ak je každý príkaz vykonaný v inej podružnej vrstve, nie je riziko, že sa premenné nastavenia zmiešajú. Po dokončení sa nastavenia a aktuálny adresár nemusia obnoviť, pretože prostredie rodičovského procesu nie je ovplyvnené žiadnou zo svojich podprocesov.

V definíciách funkcií sa môžu používať podsústavy, takže je možné ich vykonať viackrát s rôznymi parametrami.