Skip to main content

Bash Subshells y procesamiento paralelo

Tutorial de como tocar bajo y piano de acompañamiento (Abril 2025)

Tutorial de como tocar bajo y piano de acompañamiento (Abril 2025)
Anonim

Un shell es una interfaz básica para ingresar comandos en un sistema Linux. Con él, puede ingresar un comando directamente o especificar un archivo (script) que contenga una secuencia de comandos a ejecutar. Los shells se organizan en una jerarquía, y cualquier shell puede crear un nuevo shell. El nuevo shell se considera un proceso secundario, un subshell, del shell primario que lo crea.

De forma predeterminada, una subshell depende de su padre en el sentido de que si el proceso padre termina, la subshell también termina. Cualquier salida se pasa de la subshell al shell primario.

Cómo crear una subshell

En un script de shell Bash, creas una subshell usando la notación de paréntesis:

En el ejemplo, el bucle while se incluye entre paréntesis, lo que hace que se ejecute en una subshell de la shell en la que se ejecuta el archivo de script.

Ejecutar una subshell en el fondo

A menos que especifique que la subshell se ejecutará en segundo plano, la shell principal esperará a que la subshell termine antes de continuar con el resto del script. Sin embargo, si desea ejecutar subshells en paralelo, los ejecuta en segundo plano, lo que se logra con el carácter "y" comercial después de la expresión de subshell, como se muestra aquí:

Ejecutando múltiples subshells en paralelo

Si crea múltiples subshells como procesos en segundo plano, puede ejecutar tareas en paralelo. Normalmente, el sistema operativo utiliza diferentes procesadores o núcleos para cada proceso y subproceso, suponiendo que haya al menos tantos procesadores o núcleos como procesos. De lo contrario, las tareas se asignan a los mismos procesadores o núcleos. En ese caso, el procesador o el núcleo cambia continuamente entre las tareas asignadas hasta que se completen las tareas. El siguiente ejemplo tiene dos subprocesos. El primero cuenta de 1 a 99, y el segundo de 1000 a 1099.

Use la instrucción de espera para decirle al proceso principal que espere a que los subprocesos terminen antes de continuar con el resto del script:

Usos para Subshells

Las subshells son útiles cuando los comandos deben ejecutarse en un entorno o directorio en particular. Si cada comando se ejecuta en una subshell diferente, no hay riesgo de que la configuración de la variable se mezcle. Al finalizar, no es necesario restaurar la configuración y el directorio actual, ya que el entorno del proceso principal no se ve afectado por ninguno de sus subprocesos.

Las subshells se pueden usar en las definiciones de funciones para que se puedan ejecutar varias veces con diferentes parámetros.