Comando bg en Linux: Cómo reanudar procesos suspendidos en segundo plano
Como sistema operativo multitarea, Linux soporta la ejecución de muchos procesos - que no son más que programas en ejecución. Estos programas pueden ejecutarse conectados al terminal o no. Si están conectados al terminal, decimos que está en primer plano. Y si no necesitan estar conectados al terminal para funcionar, decimos que está en ejecución en segundo plano.
El Comando bg en Linux coloca un proceso detenido con la señal SIGSTOP en segundo plano.
¿Qué son los Procesos en primer plano (Foreground)?
Un proceso en primer plano es cualquier programa que cuando se ejecuta, está directamente conectado al terminal. Algunos procesos en primer plano permiten algún tipo de interfaz que ofrece soporte a la interacción continua del usuario, mientras otros ejecutan una tarea y "congelan" el terminal mientras la tarea se completa.
El propio bash es un proceso que está en ejecución en primer plano, esperando por una interacción del usuario al aguardar y ejecutar comandos.
Cuando ejecutas un comando en bash, se crea un proceso hijo, y el terminal queda a cargo del proceso hijo, que posee el terminal hasta que termine de ejecutar.
En el ejemplo, cuando escribes ls en bash, el comando ls se ejecuta en primer plano, y proporciona una lista de archivos. No devuelve el terminal a bash hasta que termine de listar los archivos:
$ ls
Si existen muchos archivos en el directorio, ls puede demorar en devolver el prompt de comandos al usuario.
¿Qué son los Procesos en segundo plano (Background)?
Un proceso en segundo plano es cualquier programa que cuando se ejecuta, no está conectado al terminal. Simplemente ejecuta, sin ninguna interacción directa con el usuario. Este tipo de programas generalmente son daemons (servicios) que el sistema provee, tales como un servidor web, servidor de correo, etc.
El símbolo & en Linux
Virtualmente cualquier programa que pueda ejecutarse sin exigir la interacción del usuario puede ejecutarse en segundo plano. Para eso, basta con agregar el símbolo de "&" al final del comando.
La salida del comando en segundo plano aún puede descargarse en el terminal, aunque ese comando esté ejecutándose en segundo plano.
En el ejemplo, ls puede ejecutarse en segundo plano, pero su salida aún va al terminal:
$ ls -l &[1] 14907[ec2-user@ip-172-30-0-241 etc]$ total 1444drwxr-xr-x 4 root root 35 jun 21 18:54 acpi-rw-r--r-- 1 root root 16 mar 8 2019 adjtime-rw-r--r-- 1 root root 1518 jun 7 2013 aliases-rw-r--r-- 1 root root 12288 abr 5 13:44 aliases.dbdrwxr-xr-x 2 root root 261 abr 18 20:16 alternativesdrwxr-xr-x 3 root root 17 mar 8 2019 amazondrwxr-xr-x 2 root root 50 abr 10 11:06 amplify-agen( ... )
Generalmente los programas que ejecutan en segundo plano están preparados para eso, de modo que no envían nada a la salida estándar (STDOUT). Pero puedes enviar la salida estándar de un comando que no fue preparado para esto con el conducto:
$ ls -l > /tmp/saida &
Control de Procesos
Cada programa que se pone en ejecución en el shell es tratado como un Job (trabajo), que no es más que un Proceso que el shell gestiona.
Cada Job recibe una ID secuencial. Como un job es un proceso, cada job también tiene un ID de proceso (PID) asociado. Existen tres tipos de estados de jobs:
- Primer plano (foreground): Cuando introduces un comando en una ventana del terminal, el comando ocupa la ventana del terminal hasta que se complete. Este es un job en primer plano.
- Segundo plano (background): cuando introduces el símbolo & al final de una línea de comando, el comando se ejecuta sin ocupar la ventana del terminal. El prompt del shell se muestra inmediatamente después de que presionas Enter. Este es un ejemplo de un trabajo en segundo plano.
- Detenido (stopped): si presionas Control + Z para un job en primer plano o introduces el comando stop para un job en segundo plano, el job será interrumpido. Este job se llama job detenido.
Existen algunos comandos que permiten gestionar los Jobs en Linux, tales como bg, fg y jobs.
El Comando bg en Linux
Después de que un proceso entró en ejecución en primer plano, esto es, conectado a un terminal, puede ser colocado en segundo plano.
Para hacer esto es necesario interrumpir temporalmente su ejecución con la señal SIGTSTP (20) presionando las teclas Ctrl-z y activando luego el comando bg.
El comando bg en Linux coloca en segundo plano un proceso en ejecución que fue "congelado" por la señal SIGTSTP. Ver en el ejemplo:
$ find / -name mss > lista_msg.txtCTRL-z[1]+ Stopped find / -name mss >lista_msg.txt
$ bg[1]+ find / -name mss >lista_msg.txt &
En este ejemplo el utilitario find se ejecuta normalmente. Durante su ejecución se envía la señal TSTP (ctrl-z) y luego es colocado en segundo plano con el comando bg y gana el número de tarea 1 por el control de tareas.
Cada proceso que sea colocado en ejecución con el "&" también gana un número de Job por el control de tareas.
El bg también acepta que el número del job - sea pasado como parámetro. Para enviar el proceso nuevamente al primer plano (conectado al terminal), el comando fg puede ser usado.
Y para verificar la lista de procesos en segundo plano, el comando jobs puede ser usado.
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.