Naučite se, kako pravilno izvajati podskupine, ki uporabljajo Bash skripte

Kako naročiti podskupine za zagon vzporedno v ozadju

Lupina je osnovni vmesnik za vnos ukazov na sistem Linux. Z njim lahko neposredno vnesete ukaz ali določite datoteko (skripto), ki vsebuje zaporedje ukazov, ki jih je treba izvesti. Shelle so organizirane v hierarhiji in vsaka lupina lahko ustvari novo lupino. Nova lupina se šteje za otrokov postopek - podomrežje - starševske lupine, ki jo ustvari.

Podsklop je privzeto odvisen od njegovega nadrejenega v smislu, da če se starševski proces konča, se tudi podomrežje zaključi. Vsak izhod se prenese iz podomrežja v nadrejeno lupino.

Kako ustvariti podskupino

V skriptni lupini Bash ustvarite podvrsto, ki uporablja zapis oklepaja:

#! / bin / bash echo "Pred začetkom podskupine" (count = 1 medtem ko [$ count -le 99] ponovi "$ count" sleep 1 ((count ++)) done) echo "Finished"

V primeru je zanka medtem ko je v oklepaju, kar povzroči, da se ga izvede v podskupini lupine, v kateri se izvaja skriptna datoteka.

Izvajanje podlage v ozadju

Če ne določite, ali naj se podomrežje izvaja v ozadju, nadrejena lupina počaka, da se podomrežje konča, preden nadaljuje s počitkom skripta. Če pa želite vzporedno zagnati podskupine, jih zaženete v ozadju, ki se izvede z znakom ampersand in sledi izrazu podvrste, kot je prikazano tukaj:

#! / bin / bash echo "Pred začetkom podskupine" (count = 1 medtem ko [$ count -le 99] naredi echo "$ count" sleep 1 ((count ++))) & echo "Finished"

Vzporedno izvajate več podskupin

Če ustvarite več podvrst v ozadju, lahko opravljate naloge vzporedno. Običajno operacijski sistem uporablja različne procesorje ali jedra za vsak proces in podproces, ob predpostavki, da obstaja vsaj toliko procesorjev ali jeder, kot obstajajo postopki. V nasprotnem primeru so naloge dodeljene istim procesorjem ali jedrom. V tem primeru se procesor ali jedro stalno preklopi med dodeljene naloge, dokler se naloge ne končajo. Naslednji primer ima dva podprocesa. Prvi se šteje od 1 do 99, drugi pa od 1000 do 1099.

#! / bin / bash echo "Pred začetkom podskupine" (count = 1 medtem ko [$ count -le 99] se odziva "$ count" sleep 1 ((count ++)) done) & (count = 1000 medtem ko [$ count -le 1099] echo "$ count" sleep 1 ((count ++))) & echo "Finished"

Uporabite stavko čakanja, da poveste starševemu procesu, da počaka, da se podprocesi končajo, preden nadaljuje s preostalim skriptom:

#! / bin / bash echo "Pred začetkom podskupine" (count = 1 medtem ko [$ count -le 99] se odziva "$ count" sleep 1 ((count ++)) done) & (count = 1000 medtem ko [$ count -le 1099] echo "$ count" sleep 1 ((count ++)) naredi) & počakajte echo "Končano"

Uporablja se za Subshells

Subshells so uporabni, ko je treba ukaze izvajati v določenem okolju ali imeniku. Če je vsak ukaz izvršen v drugem podoknu, ni nobene nevarnosti, da bodo spremenjene nastavitve pomešane. Po dokončanju nastavitev in trenutni imenik ni treba obnoviti, ker na okolje nadrejenega postopka nima nobenega podprocesa.

Subshells se lahko uporabijo v definicijah funkcij, tako da jih je mogoče večkrat izvajati z različnimi parametri.