Administración de procesos en segundo plano en Linux

LinuxBeginner
Practicar Ahora

Introducción

Linux ofrece poderosas capacidades para gestionar múltiples procesos simultáneamente. Una de sus características clave es la capacidad de ejecutar procesos en segundo plano, lo que te permite continuar utilizando la terminal para otras tareas mientras se ejecutan procesos de larga duración.

En este laboratorio (lab), aprenderás técnicas esenciales para gestionar procesos en segundo plano en sistemas Linux. Estas habilidades son cruciales para una multitarea eficiente en entornos de línea de comandos y son utilizadas regularmente por administradores de sistemas y desarrolladores.

Al final de este laboratorio (lab), entenderás cómo iniciar procesos en segundo plano, monitorear su estado y controlarlos de manera efectiva. Estas habilidades te ayudarán a aprovechar mejor los recursos del sistema y a mejorar tu productividad cuando trabajes con sistemas Linux.

Iniciando un Proceso en Segundo Plano (Background)

En Linux, puedes ejecutar un comando en segundo plano (background) añadiendo un carácter ampersand (&) al final de tu comando. Esto le indica al shell que ejecute el proceso en segundo plano, permitiéndote continuar usando tu terminal mientras el comando se ejecuta.

Creemos y ejecutemos un script simple que simule un proceso de larga duración.

Primero, asegúrate de estar en el directorio del proyecto:

cd ~/project

Ahora, creemos un archivo de script llamado long_running.sh usando el editor de texto nano:

nano ~/project/long_running.sh

Cuando se abra el editor nano, introduce el siguiente código:

#!/bin/bash
echo "Starting a long process..."
sleep 600
echo "Process completed"

Este script:

  1. Imprime un mensaje de inicio (starting message)
  2. Se pausa durante 10 minutos (simulando una tarea que consume tiempo)
  3. Imprime un mensaje de finalización (completion message)

Para guardar el archivo en nano:

  1. Presiona Ctrl + O para escribir el archivo
  2. Presiona Enter para confirmar el nombre del archivo
  3. Presiona Ctrl + X para salir de nano

A continuación, necesitamos hacer que el script sea ejecutable:

chmod +x ~/project/long_running.sh

Ahora, ejecutemos el script en primer plano (foreground) primero para ver cómo funciona:

./long_running.sh

Verás:

Starting a long process...

Observa que tu terminal ahora está ocupada durante 15 segundos hasta que el script se complete. No puedes introducir nuevos comandos durante este tiempo.

Ahora, ejecutemos el mismo script en segundo plano (background) añadiendo un ampersand (&) al final:

./long_running.sh &

Verás una salida similar a:

[1] 1234
Starting a long process...

La salida muestra:

  • [1] - el número de trabajo (job number) asignado por el shell
  • 1234 - el ID del proceso (PID, Process ID), que será un número diferente en tu sistema
  • El mensaje de inicio (starting message) del script

Aunque el script todavía se está ejecutando, tu prompt del shell regresa inmediatamente, permitiéndote introducir nuevos comandos. Después de 15 segundos, verás aparecer el mensaje de finalización (completion message):

Process completed
[1]+  Done                    ./long_running.sh

Esto confirma que el proceso en segundo plano (background process) ha completado su ejecución.

Visualizar procesos en segundo plano

Después de iniciar procesos en segundo plano, necesitas saber cómo seguirlos. Linux proporciona el comando jobs para mostrar todos los procesos en segundo plano que se están ejecutando en tu sesión de terminal actual.

Vamos a iniciar múltiples procesos en segundo plano y luego verlos:

## Start the first background process
./long_running.sh &

Verás una salida similar a:

[1] 1234
Starting a long process...

Ahora inicia un segundo proceso en segundo plano:

## Start the second background process
./long_running.sh &

Verás una salida similar a:

[2] 1235
Starting a long process...

Para ver todos tus procesos en segundo plano (trabajos), utiliza el comando jobs:

jobs

Deberías ver una salida similar a:

[1]  Running                 ./long_running.sh &
[2]- Running                 ./long_running.sh &

Esto muestra que tienes dos trabajos en segundo plano en ejecución. Los números entre corchetes son los IDs de trabajo que puedes utilizar para hacer referencia a trabajos específicos con otros comandos.

El comando jobs admite varias opciones útiles:

  • jobs -l - muestra los IDs de proceso junto con la información del trabajo
  • jobs -p - muestra solo los IDs de proceso de los trabajos

Prueba la opción -l para ver más detalles:

jobs -l

La salida incluirá los IDs de proceso:

[1]  1234 Running                 ./long_running.sh &
[2]- 1235 Running                 ./long_running.sh &

Espera a que ambos procesos se completen antes de pasar al siguiente paso. Verás mensajes como:

Process completed
[1]+  Done                    ./long_running.sh
Process completed
[2]+  Done                    ./long_running.sh

Mover procesos entre primer y segundo plano

Linux te permite mover procesos entre los estados de primer plano y segundo plano. Esto es especialmente útil cuando:

  • Has iniciado un proceso en primer plano y necesitas utilizar la terminal para otra cosa.
  • Quieres traer un proceso en segundo plano al primer plano para interactuar con él.

Vamos a aprender cómo hacer esto utilizando los comandos fg (primer plano) y bg (segundo plano), junto con la suspensión de procesos.

Primero, inicia nuestro script de larga duración en primer plano (sin el &):

./long_running.sh

Verás:

Starting a long process...

Observa que el indicador de la shell no vuelve; la terminal está ahora ocupada por este proceso que se ejecuta en primer plano.

Para suspender (pausar) este proceso y recuperar el control de tu terminal:

  1. Presiona Ctrl + Z

Verás una salida similar a:

^Z
[1]+  Stopped                 ./long_running.sh

El proceso está ahora suspendido y no se está ejecutando. Puedes confirmar esto con el comando jobs:

jobs

Salida:

[1]+  Stopped                 ./long_running.sh

Para reanudar el proceso suspendido en segundo plano, utiliza el comando bg:

bg %1

El %1 se refiere al número de trabajo 1. Verás:

[1]+ ./long_running.sh &

El proceso se está ejecutando ahora en segundo plano. Confirma con jobs:

jobs

Salida:

[1]+  Running                 ./long_running.sh &

Para traer un proceso en segundo plano al primer plano, utiliza el comando fg:

fg %1

El proceso se ejecutará ahora de nuevo en primer plano, y tu terminal estará ocupada hasta que se complete:

./long_running.sh
Process completed

Después de que el proceso se complete, el indicador de la shell volverá.

Mantener procesos en ejecución después de cerrar la terminal

Cuando ejecutas un proceso en segundo plano con &, se terminará si cierras la terminal. Para mantener un proceso en ejecución incluso después de cerrar la terminal, puedes utilizar el comando nohup.

nohup (abreviatura de "no hang up", es decir, "no suspender") evita que el proceso reciba la señal SIGHUP (suspensión), que se envía a los procesos cuando se cierra la terminal.

Modifiquemos nuestro script para que se ejecute durante más tiempo:

nano ~/project/long_running.sh

Actualiza el contenido a:

#!/bin/bash
echo "Starting a very long process..."
sleep 60
echo "Process completed" > ~/project/completed.txt

Guarda y sale de nano (Ctrl+O, Enter, Ctrl+X).

Ahora, ejecutemos el script con nohup:

nohup ./long_running.sh &

Verás una salida similar a:

[1] 1234
nohup: ignoring input and appending output to 'nohup.out'

La salida del script no se mostrará en la terminal. En lugar de eso, se redirigirá a un archivo llamado nohup.out. Puedes comprobar este archivo:

cat nohup.out

Deberías ver:

Starting a very long process...

Incluso si cerraras la terminal ahora, el proceso seguiría en ejecución. Cuando se complete, escribirá tanto en nohup.out como en completed.txt.

Para ver los procesos que se ejecutan en segundo plano en todas las terminales, utiliza el comando ps:

ps aux | grep long_running.sh

Verás algo como:

labex     1234  0.0  0.0   8160   736 pts/0    S    12:34   0:00 /bin/bash ./long_running.sh
labex     1235  0.0  0.0  14428  1020 pts/0    S+   12:34   0:00 grep --color=auto long_running.sh

Espera a que el proceso se complete (o termínalo si lo deseas):

## If you want to terminate the process:
kill %1

Resumen

En este laboratorio, has aprendido técnicas esenciales para gestionar procesos en segundo plano en Linux:

  1. Iniciar procesos en segundo plano: Has aprendido cómo iniciar procesos en segundo plano utilizando el operador &, lo que te permite continuar utilizando tu terminal mientras el proceso se ejecuta.

  2. Ver procesos en segundo plano: Has utilizado el comando jobs para ver todos los procesos en segundo plano que se ejecutan en tu sesión de terminal actual.

  3. Mover procesos entre primer plano y segundo plano: Has practicado el uso de Ctrl+Z para suspender un proceso, bg para continuar su ejecución en segundo plano y fg para traerlo al primer plano.

  4. Mantener procesos en ejecución después de cerrar la terminal: Has utilizado el comando nohup para mantener los procesos en ejecución incluso si la sesión de terminal finaliza.

Estas habilidades son esenciales para una multitarea efectiva en entornos Linux. Te permiten ejecutar múltiples procesos simultáneamente, utilizar de manera eficiente los recursos de la terminal, mantener procesos de larga duración sin dejar las terminales abiertas y gestionar los estados de ejecución de los procesos.

Con estas técnicas, puedes trabajar de manera más eficiente y efectiva en entornos de línea de comandos de Linux, ya sea que estés administrando servidores, desarrollando aplicaciones o realizando tareas de administración del sistema.