Õppige, kuidas Bashi skriptidest lähtuvalt kasutada Subshellsit nõuetekohaselt

Kuidas juhendada Subshells paralleelselt taustal

Koor on Linuxi süsteemis käskude sisestamise peamine liides. Sellega saate otse käsu sisestada või määrata faili (skript), mis sisaldab käskude jada käivitamiseks. Koored on korraldatud hierarhias ja iga shell saab luua uue kest. Uut shellit peetakse lapseprotsessiks - alamkell - selle loomisel olevast vanemakolonnist.

Vaikimisi sõltub alamkanal oma vanemast selles mõttes, et kui vanemprotsess lõpeb, lõpeb ka alamkanal. Iga väljund viiakse alamhoonest üle vanemale shellile.

Kuidas luua subshell

Bashi shelliskriptis loote alamkaabli, kasutades sulgemisnuppu:

#! / bin / bash echo "Enne alammenüü alustamist" (count = 1, samas kui [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) echo "Finished"

Selles näites on ajasulg liidetud sulgudes, mis põhjustab selle täitmise shelli alamhulka, milles skriptifaili käivitatakse.

Subshelli käitamine taustal

Kui te ei määra, kas alamkanal tuleb taustal täita, peate vanema kestust, enne kui alustatakse skripti ülejäänud osas, ootama alamhulga lõpetamist. Siiski, kui soovite paralleelselt käivitada allüksusi, käivitate need taustal, mis toimub alamhulga väljendiga järgnev tähtmärk, nagu on näidatud siin:

#! / bin / bash echo "Enne alammenüü alustamist" (count = 1, kuigi [$ count -le 99] echo "$ count" sleep 1 ((count ++)) lõpetatud) & echo "Finished"

Mitu paralleelselt paralleelselt käivitatakse

Kui loote mitut alamkataloogi taustprotsessina, saate ülesandeid paralleelselt käitada. Tavaliselt kasutab operatsioonisüsteem iga protsessi ja alamprotsessi jaoks erinevaid protsesse või südamikku, eeldades, et protsesside olemasolu korral on vähemalt sama palju protsesse või südamikke. Vastasel juhul on ülesanded määratud samadele protsessoritele või südamikele. Sellisel juhul lülitub protsessor või tuum pidevalt ülesannete vahel kuni ülesannete täitmiseni. Järgmisel näitel on kaks alamprotsessi. Esimene arv 1 kuni 99 ja teine ​​1000 kuni 1099.

#! / bin / bash echo "Enne alammenüü alustamist" (count = 1, samas kui [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) & (count = 1000 while [$ count -le] 1099] echo "$ count" sleep 1 ((count ++)) lõpetatud) & echo "Lõpetatud"

Kasutage ootearuannet, et öelda vanemprotsessile, et subprotsessid lõpetada, enne kui jätkate ülejäänud skriptiga:

#! / bin / bash echo "Enne alammenüü alustamist" (count = 1, samas kui [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) & (count = 1000 while [$ count -le] 1099] echo "$ count" sleep 1 ((count ++)) lõpetatud) & oodata echo "Lõpetatud"

Kasutab Subshellsit

Subshellid on kasulikud, kui käske tuleb teatud kindlas keskkonnas või kataloogis käivitada. Kui iga käsu käivitamine toimub teises alamkataloogis, ei ole riski, et muutuja seadeid segatakse. Lõpetamisel ei pea seadeid ja praegust kataloogi taastada, kuna ükski selle alamprotsessidest ei mõjuta ema protsessi keskkonda.

Subshelli saab kasutada funktsioonide määratlustes, nii et neid saab erinevate parameetritega mitu korda täita.