Cuando hablamos sobre procesos en un post anterior, explicamos el concepto de proceso hijo y proceso padre. En esta oportunidad utilizaremos lo que aprendimos anteriormente para brindar más información sobre Bash. En concreto, explicaremos qué es una subshell y en qué caso se utiliza. De hecho, hemos estado utilizando subshells quizás sin darnos cuenta.
Información sobre Bash
Consideremos el siguiente script (subshellejemplo1.sh). En el mismo utilizamos las variables especiales $$ y $PPID. Estas variables representan el PID y el PPID del script, respectivamente.
#!/bin/bash NOMBRE_SCRIPT=subshellejemplo1.sh PID_SCRIPT=$$ PPID_SCRIPT=$PPID echo "El PID de $NOMBRE_SCRIPT es $PID_SCRIPT y el de su padre (PPID) es $PPID_SCRIPT."
Antes de correrlo, ejecutemos el siguiente comando para identificar el PID de nuestra shell:
ps | grep bash | grep -v grep
En la Fig. 1 podemos ver resaltado el PID de nuestra shell. También observamos que el PID de nuestra shell es el PPID del script:
El ejemplo anterior ilustra los siguientes puntos:
- Cuando ejecutamos un script desde la línea de comandos, su PPID corresponde al PID de la shell desde el cual lo iniciamos.
- El script se ejecutó dentro de una subshell (PID 4338), que no es más ni menos que un proceso hijo de la shell con PID 3289.
Ahora veamos el propósito de la utilización de subshells para ejecutar scripts.
¿Por qué los scripts se ejecutan dentro de una subshell?
Al aislar la shell de un script (ya vimos que se trata de dos procesos diferentes) evitamos que al terminar o interrumpir la ejecución nuestra shell se cierre.
A su vez, un script puede llamar a otros scripts. Por ejemplo, esto es útil para realizar varias tareas en paralelo o de manera simultánea. En el próximo post ilustraremos este punto mediante un ejemplo práctico en el que ejecutaremos varios scripts desde uno principal.
¡Nos leemos en breve!