Información sobre Bash: ¿Qué es una subshell y dónde aparece?

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:

Información sobre bash: shell y subshell
Figura 1 – Información sobre bash: shell y subshell

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!

Deja una respuesta