Sužinokite, kaip tinkamai paleisti "Subshells" naudojant "Bash" scenarijus

Kaip Instruct Subshells paleisti lygiagrečiai fone

"Shell" yra pagrindinė sąsaja komandų įvedimui "Linux" sistemoje. Su juo galite tiesiogiai įvesti komandą arba nurodyti failą (scenarijų), kuriame yra vykdomų komandų seka. Korpusai yra surūšiuojami hierarchijoje, o bet koks korpusas gali sukurti naują korpusą. Naujasis apvalkalas laikomas vaiko procesu - pagrindine lukštais, kuris jį sukuria.

Pagal numatytuosius nustatymus požeminis skydas priklauso nuo jo tėvų, taigi, jei tėvų procesas baigiasi, taip pat baigiasi ir pogrupis. Bet kokia produkcija perduodama iš "subshell" į pagrindinį lukštą.

Kaip sukurti Subshell

"Bash shell" scenarijuje sukūrę poskyrį naudodami skliaustų žymėjimą:

#! / bin / bash echo "Prieš pradedant subshell" (skaičius = 1, kol [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) echo "Finished"

Pavyzdyje, o ciklas yra uždėtas skliaustuose, todėl jis turi būti vykdomas apvalkalo, kuriame vykdomas scenarijaus failas, apatinėje eilutėje.

"Subshell" paleidimas fone

Jei nenurodysite, kad požeminė skiltis turi būti paleista fone, tėvų lukštas laukia, kol po to bus baigtas, prieš pradedant likti scenarijaus. Tačiau, jei norite lygiagrečiai paleisti subshells, paleiskite juos fone, o tai atliekama su ampersanto ženklu po požymių išraiškos, kaip parodyta čia:

#! / bin / bash echo "Prieš pradedant subshell" (skaičius = 1, kol [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) & echo "Finished"

Paleisti kelis prenumeruojamus rakteles lygiagrečiai

Jei sukursite keletą subshells kaip foninius procesus , galite užduotis atlikti lygiagrečiai. Paprastai operacinė sistema naudoja skirtingus procesorius arba branduolius kiekvienam procesui ir pogrupiui, darant prielaidą, kad procesoriai ar šerdys yra tiek pat, kiek yra procesų. Priešingu atveju užduotys priskiriamos tiems patiems procesoriams ar šerdims. Tokiu atveju procesorius ar branduolys nuolat pereina tarp priskirtų užduočių, kol užduodamos užduotys. Kitas pavyzdys turi dvi pogrupius. Pirmasis skaičiuojamas nuo 1 iki 99, o antrasis - nuo 1000 iki 1099.

#! / bin / bash echo "Prieš pradedant subshell" (count = 1, kol [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) & (count = 1000 while [$ count -le] 1099] echo "$ count" sleep 1 ((count ++)) done) & echo "Finished"

Norėdami palaukti , kol subprocesai bus baigti, prieš paleisdami likusį scenarijų, naudokite laukimo ataskaitą, norėdami pranešti tėvų procesui:

#! / bin / bash echo "Prieš pradedant subshell" (count = 1, kol [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) & (count = 1000 while [$ count -le] 1099] do echo "$ count" sleep 1 ((count ++)) done) & wait echo "Finished"

Naudoja "Subshells"

Subshells yra naudingos, kai komandos turi būti vykdomos tam tikroje aplinkoje arba kataloge. Jei kiekviena komanda vykdoma kitoje subsegėje, nėra pavojaus, kad kintamųjų nustatymai bus sumaišyti. Pabaigus, nustatymai ir dabartinis katalogas nebūtina atkurti, nes jo tęstinio proceso aplinka nėra paveikta jokios jos pogrupių.

Subshells gali būti naudojamos funkcijų apibrėžtyse , kad jas būtų galima atlikti keletą kartų su skirtingais parametrais.