Mësoni Si të Siguroheni Si të Veproni mirë Subshells duke përdorur Scripts Bash

Si të udhëzosh subshells për të drejtuar në paralel në sfond

Një predhë është një ndërfaqe bazë për hyrjen e komandave në një sistem Linux. Me të, ju mund të futni një komandë të drejtpërdrejtë ose të specifikoni një skedar (script) që përmban një sekuencë të komandave që do të ekzekutohen. Shellat organizohen në një hierarki, dhe çdo shell mund të krijojë një shell të ri. Predha e re konsiderohet si një proces i fëmijës - një subshell - i skemës mëmë që e krijon atë.

Sipas paracaktimit, një subshell varet nga prindi i tij në kuptimin që nëse procesi i prindit përfundon, nënkrementi gjithashtu përfundon. Çdo dalje kalon nga skaji në skelet mëmë.

Si të krijoni një subshell

Në një skriptë shell Bash, ju krijoni një subshell duke përdorur simbolin e kllapa:

#: / bin / bash echo "Para fillimit të nënshkrimit" (count = 1 ndërsa [$ count -le 99] nuk echo "$ count" sleep 1 ((count ++)) done) echo "Finished"

Në shembull, loop ndërsa është mbyllur në kllapa, e cila shkakton që ajo të ekzekutohet në një subshell të shell në të cilin skedari skedë është ekzekutuar.

Kryerja e një subshell në sfond

Përjashtim të rastit kur përcaktoni se nënstacioni do të ekzekutohet në sfond, skema mëmë pritet që fundi të mbarojë përpara se të vazhdohet me pjesën tjetër të skriptit. Sidoqoftë, nëse doni të kryeni paralelizime paralelisht, ju drejtoheni në sfond, e cila realizohet me karakter amë dhe karakter pas shprehjes së nënshkrimit, siç tregohet këtu:

#:. / bin / bash echo "Para fillimit të nënshkrimit" (count = 1 ndërsa [$ count -le 99] nuk echo "$ count" sleep 1 ((count ++)) done) & echo "Finished"

Kryerja e disa subshelleve në paralele

Nëse krijoni nënshtresa të shumta si proceset e sfondit, mund të kryeni detyra paralelisht. Në mënyrë tipike, sistemi operativ përdor procesorë ose bërthamë të ndryshëm për çdo proces dhe nënproces, duke supozuar se ka të paktën sa më shumë procesorë ose bërthama sa ka procese. Përndryshe, detyrat u caktohen procesorëve ose bërthamave të njëjta. Në këtë rast, procesori ose bërthama ndryshon vazhdimisht midis detyrave të caktuara derisa të përfundohen detyrat. Shembulli tjetër ka dy nënprocesa. I pari numëron nga 1 në 99, dhe i dyti nga 1000 në 1099.

(count = 1 ndërsa [$ count -le 99] do echo "$ count" sleep 1 ((count ++)) është bërë) & (count = 1000 ndërsa [$ count -le 1099] bëni echo "$ count" gjumë 1 ((count ++)) done) & echo "Finished"

Përdorni deklaratën e pritjes për t'i thënë procesit të prindërve të presin që nënproceset të përfundojnë përpara se të vazhdojnë me pjesën tjetër të shkrimit:

(count = 1 ndërsa [$ count -le 99] do echo "$ count" sleep 1 ((count ++)) është bërë) & (count = 1000 ndërsa [$ count -le 1099] bëni echo "$ count" gjumë 1 ((count ++)) done) & prisni echo "Finished"

Përdor për Subshells

Subshells janë të dobishme kur komandat duhet të ekzekutohen në një mjedis apo directory të caktuar. Nëse çdo komandë ekzekutohet në nënstacione të ndryshme, nuk ekziston rreziku që parametrat e ndryshueshme të jenë të përziera. Pas përfundimit, cilësimet dhe direktoria aktuale nuk duhet të rikthehen, pasi mjedisi i procesit të prindit nuk ndikohet nga asnjë nënproces.

Subshells mund të përdoren në përkufizimet e funksioneve në mënyrë që ato të ekzekutohen shumë herë me parametra të ndryshëm.