Aprende a executar correctamente subesinos usando scripts de Bash

Como instruír Subshells para executar en paralelo no fondo

Un shell é unha interface básica para introducir comandos nun sistema Linux. Con el, pode introducir un comando directamente ou especificar un ficheiro (script) que contén unha secuencia de comandos a executar. Os depósitos están organizados nunha xerarquía e calquera shell pode crear un novo shell. O novo shell considérase un proceso secundario -subsecretario- do shell primario que o crea.

De xeito predeterminado, un subshell depende do seu pai no sentido de que se o proceso principal remata, o subshell tamén remata. Calquera resultado pasa do subshell ao shell primario.

Como crear un subconxunto

Nun script de shell de Bash, crea un subshell usando a notación de parénteses:

#! / bin / bash echo "Antes de iniciar subshell" (count = 1 while [$ count -le 99] faga eco "$ count" sleep 1 ((count ++)) feito) echo "Completed"

No exemplo, o ciclo while está entre paréntese, o que fai que se execute nun subsolo da shell onde se executa o ficheiro de script.

Executando un subconxunto no fondo

A menos que especifique que o subshell se executará en segundo plano, a shell primaria agarda que o subshell finalice antes de continuar co resto do script. Non obstante, se desexa executar subshells en paralelo, executalos en segundo plano, que se realiza co carácter ampersand seguindo a expresión subshell, como se mostra aquí:

#! / bin / bash echo "Antes de iniciar o subsolo" (contar = 1 mentres que [$ count -le 99] faga eco "$ count" durmir 1 ((count + + +)) feito) & eco "Completed"

Executando múltiples subconxuntos en paralelo

Se cree varios subshells como procesos de fondo, pode executar tarefas en paralelo. Normalmente, o sistema operativo usa diferentes procesadores ou núcleos para cada proceso e subproceso, e supón que hai polo menos tantos procesadores ou núcleos como hai procesos. Se non, as tarefas están asignadas aos mesmos procesadores ou núcleos. Nese caso, o procesador ou núcleo cambia continuamente entre as tarefas asignadas ata que se completen as tarefas. O seguinte exemplo ten dous subprocesos. A primeira conta de 1 a 99, ea segunda de 1000 a 1099.

#! / bin / bash echo "Antes de iniciar o subshell" (count = 1 while [$ count -le 99] faga eco "$ count" sleep 1 ((count + +)) feito) & (count = 1000 while [$ count -le 1099] facer eco "$ count" durmir 1 ((contar + + +)) feito) & eco "Rematado"

Use a instrución wait para indicarlle ao proceso primario que espera que os subprocesos finalicen antes de continuar co resto do script:

#! / bin / bash echo "Antes de iniciar o subshell" (count = 1 while [$ count -le 99] faga eco "$ count" sleep 1 ((count + +)) feito) & (count = 1000 while [$ count -le 1099] facer eco "$ count" durmir 1 ((contar + + +)) feito) & esperar eco "Rematado"

Usos para Subshells

Os subconxuntos son útiles cando hai que executar comandos nun ambiente ou directorio particular. Se cada comando se executa nun subshell diferente, non hai risco de que a configuración variable se confunda. Unha vez completado, non é necesario restaurar a configuración eo directorio actual, xa que a contorna do proceso primario non se ve afectada por ningún dos seus subprocesos.

Os Subshells pódense usar en definicións de funcións para que poidan executarse varias veces con diferentes parámetros.