Un shell es una interfaz básica para introducir comandos en un sistema Linux. Con él, puede introducir un comando directamente o especificar un archivo (script) que contenga una secuencia de comandos a ejecutar. Las shells están organizadas en una jerarquía, y cualquier shell puede crear una nueva shell. La nueva shell se considera un proceso hijo -una subsecara- de la shell padre que la crea.
Por defecto, un subshell depende de su padre en el sentido de que si el proceso padre termina, el subshell también termina. Cualquier salida se pasa del subshell al shell padre.
Índice de contenidos
Cómo Crear una Subshell
En un script de shell de Bash, se crea una subcarpeta utilizando la notación de paréntesis:
En el ejemplo, el bucle while está encerrado entre paréntesis, lo que hace que se ejecute en un subshell de la shell en la que se ejecuta el archivo de script.
Ejecutar una subconjunto en segundo plano
A menos que especifique que el subshell se ejecute en segundo plano, el shell padre espera a que el subshell termine antes de continuar con el resto del script. Sin embargo, si desea ejecutar subshells en paralelo, debe ejecutarlos en segundo plano, lo que se logra con el carácter ampersand siguiendo la expresión subshell, como se muestra aquí:
Ejecución de múltiples subconjuntos 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 hay 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 núcleo cambia continuamente entre las tareas asignadas hasta que se completan las tareas. El siguiente ejemplo tiene dos subprocesos. La primera cuenta de 1 a 99, y la segunda de 1000 a 1099.
Utilice la sentencia wait para decirle al proceso padre que espere a que terminen los subprocesos antes de continuar con el resto del script:
Usos de las subconjuntos
Las subconjuntos son útiles cuando los comandos necesitan ser ejecutados en un entorno o directorio en particular. Si cada comando se ejecuta en un subshell diferente, no hay riesgo de que los ajustes de las variables se mezclen. Una vez completada, no es necesario restaurar la configuración y el directorio actual, ya que el entorno del proceso padre no se ve afectado por ninguno de sus subprocesos.
Las subconjuntos se pueden utilizar en definiciones de funciones para que se puedan ejecutar varias veces con parámetros diferentes.