Leer hoe om Subshells behoorlik te gebruik. Gebruik basiese skripte

Hoe om Subshells te instrueer om parallel in die agtergrond te hardloop

'N Dop is 'n basiese koppelvlak vir die invoer van opdragte op 'n Linux-stelsel. Hiermee kan u direk 'n opdrag invoer of 'n lêer (script) spesifiseer wat 'n reeks instruksies bevat wat uitgevoer moet word. Skulpies word in 'n hiërargie georganiseer, en enige dop kan 'n nuwe dop skep. Die nuwe dop word beskou as 'n kinderproses - 'n subskerm van die ouerskil wat dit skep.

By verstek is 'n subskut afhanklik van sy ouer, in die sin dat indien die ouerproses beëindig word, die subskerm ook beëindig word. Enige uitset word geslaag vanaf die subskerm na die ouersdop.

Hoe om 'n Subshell te skep

In 'n Bash-skripskrip maak jy 'n subskerm met behulp van die hakie notasie:

#! / bin / bash echo "Voor begin subshell" (telling = 1 terwyl [$ telling -le 99] echo "$ count" slaap 1 ((count ++)) gedoen) echo "Finished"

In die voorbeeld word die tiklus in hakies omgesit, wat veroorsaak dat dit uitgevoer word in 'n subskerm van die dop waarin die skriplêer uitgevoer word.

'N Subshell in die agtergrond uitvoer

Tensy u spesifiseer dat die subskerm op die agtergrond uitgevoer moet word, wag die ouerskil dat die subskerm voltooi moet word voordat u met die res van die skrip voortgaan. As u egter parallelle subshells wil hardloop, voer u hulle op die agtergrond, wat met die ampersand-karakter na die subshell-uitdrukking bereik word, soos hier getoon:

#! / bin / bash echo "Voor die begin van subskerm" (tel = 1 terwyl [$ telling -le 99] echo "$ count" slaap 1 ((count ++)) gedoen) en echo "Finished"

Meerdere Subshells uitgevoer in parallel

As jy verskeie subshells as agtergrondprosesse skep, kan jy take parallel uitvoer. Tipies gebruik die bedryfstelsel verskillende prosessors of kerne vir elke proses en subproses, met inagneming dat daar ten minste soveel verwerkers of kerne is soos prosesse. Andersins word take aan dieselfde verwerkers of kerne toegeken. In daardie geval skakel die verwerker of kern deurlopend tussen die opdragte tot die take voltooi is. Die volgende voorbeeld het twee subprosesse. Die eerste een tel 1 tot 99 en die tweede een van 1000 tot 1099.

#! / bin / bash echo "Voor die begin van die subskerm" (tel = 1 terwyl [$ telling -le 99] echo "$ count" slaap 1 ((count ++)) gedoen) en (telling = 1000 terwyl [$ telling 1099] doen echo "$ count" sleep 1 ((count ++)) gedoen) & echo "Finished"

Gebruik die wagrekening om die ouerproses te vertel om te wag vir die subprosesse om af te handel voordat jy met die res van die skrif voortgaan:

#! / bin / bash echo "Voor die begin van die subskerm" (tel = 1 terwyl [$ telling -le 99] echo "$ count" slaap 1 ((count ++)) gedoen) en (telling = 1000 terwyl [$ telling 1099] doen echo "$ count" sleep 1 ((count ++)) gedoen) en wag echo "Finished"

Gebruik vir Subshells

Subshells is nuttig wanneer opdragte uitgevoer moet word in 'n bepaalde omgewing of gids. As elke opdrag in 'n ander subskerm uitgevoer word, is daar geen risiko dat veranderlike instellings gemeng sal word nie. Na voltooiing moet die instellings en die huidige gids nie herstel word nie, aangesien die omgewing van die ouerproses nie deur enige van sy subprosesse geraak word nie.

Subshells kan in funksiedefinisies gebruik word, sodat hulle verskeie kere met verskillende parameters uitgevoer kan word.