Obteniu informació sobre com executar correctament els subscripts amb scripts basats

Com ensenyar Subshells a executar en paral·lel en el fons

Un intèrpret d'ordres és una interfície bàsica per introduir ordres en un sistema Linux. Amb ell, podeu introduir una ordre directament o especificar un fitxer (script) que contingui una seqüència d'ordres per executar. Els dipòsits estan organitzats en una jerarquia i qualsevol shell pot crear un nou intèrpret d'ordres. El nou shell es considera un procés secundari, un subshell del shell principal que el crea.

De manera predeterminada, un subshell depèn dels seus pares en el sentit que si el procés pare finalitza, el subshell també finalitza. Qualsevol sortida es passa del subshell al shell principal.

Com crear un subshell

En un script de shell de Bash, creeu un subshell amb la notació de parèntesi:

#! / bin / bash echo "Abans d'iniciar subshell" (compte = 1 mentre que [$ count -le 99] fer eco "$ count" sleep 1 ((count ++)) done) echo "Completed"

En l'exemple, el bucle while es troba entre parèntesis, el que fa que s'executi en un subsòl del shell en el qual s'executa el fitxer de seqüència.

Executar un subconjunt en segon pla

A menys que especifiqueu que el subshell s'executi en segon pla, el shell principal espera que el subshell finalitzi abans de continuar amb el resta del script. Tanmateix, si voleu executar subshells en paral·lel, els executeu en segon pla, que es realitza amb el caràcter i de l'ampersandre seguint l'expressió subshell, tal com es mostra a continuació:

#! / bin / bash echo "Abans d'iniciar subshell" (compte = 1 mentre que [$ count -le 99] fer eco "$ count" sleep 1 ((count + +)) done) & echo "Completed"

Executant múltiples subconjuntos en paral·lel

Si creeu diversos subshells com a processos de fons, podeu executar tasques en paral·lel. Normalment, el sistema operatiu utilitza diferents processadors o nuclis per a cada procés i subprocés, suposant que hi ha almenys tants processadors o nuclis ja que hi ha processos. En cas contrari, les tasques s'assignen als mateixos processadors o nuclis. En aquest cas, el processador o nucli canvia contínuament entre les tasques assignades fins que es completen les tasques. El següent exemple té dos subprocessos. El primer té entre 1 i 99 i el segon entre 1000 i 1099.

#! / bin / bash echo "Abans d'iniciar subshell" (compte = 1 mentre que [$ count -le 99] fes eco "$ count" sleep 1 ((count + +)) done) & (count = 1000 while [$ count -le 1099] fer eco "$ count" sleep 1 ((count + + +)) done) & echo "Completed"

Utilitzeu la instrucció wait per indicar-li al procés pare que espera que els subprocessos finalitzin abans de continuar amb la resta del script:

#! / bin / bash echo "Abans d'iniciar subshell" (compte = 1 mentre que [$ count -le 99] fes eco "$ count" sleep 1 ((count + +)) done) & (count = 1000 while [$ count -le 1099] feu eco "$ count" sleep 1 ((count + +)) done) & wait echo "Completed"

Utilitza Subshells

Subshells són útils quan les comandes necessiten ser executades en un entorn o directori en concret. Si cada comanda s'executa en un subconjunt diferent, no hi ha cap risc que es modifiqui la configuració variable. Al finalitzar, la configuració i el directori actual no necessiten ser restaurats, ja que l'entorn del procés principal no es veu afectat per cap dels seus subprocessos.

Els Subshells es poden utilitzar en definicions de funcions perquè es puguin executar diverses vegades amb diferents paràmetres.