Introducción
En sistemas tipo Unix, cada comando que se ejecuta desde la terminal crea un proceso. Por defecto, esos procesos se ejecutan en primer plano, lo que significa que la shell espera a que terminen antes de aceptar nuevas órdenes. Sin embargo, hay situaciones en las que resulta útil dejar que un proceso continúe ejecutándose mientras seguimos trabajando en la terminal. Para ello Linux dispone de los comandos bg y fg, que permiten mover procesos entre primer plano y segundo plano.
Qué son los procesos en primer y segundo plano
Un proceso en primer plano bloquea la terminal: no se puede escribir ningún otro comando hasta que finalice o se suspende. Un proceso en segundo plano, en cambio, sigue ejecutándose pero la shell vuelve a estar disponible inmediatamente. Esto se logra mediante la suspensión (con Ctrl+Z) y la posterior reanudación en segundo plano con bg, o bien lanzando directamente el proceso con el operador & al final de la línea.
Cómo enviar un proceso a segundo plano con & y bg
La forma más sencilla de iniciar un proceso en segundo plano es añadir el símbolo & al final del comando. Por ejemplo:
$ find / -name "*.log" 2>/dev/null & [1] 12345
La shell muestra el número de trabajo (entre corchetes) y el PID. El proceso continúa ejecutándose mientras la terminal queda libre para otros comandos.
Si ya tienes un proceso en ejecución y deseas pasarlo a segundo plano sin terminarlo, primero lo suspendes con Ctrl+Z. La shell mostrará algo como:
$ find / -name "*.tmp" 2>/dev/null ^Z [1]+ Stopped find / -name "*.tmp" 2>/dev/null
Luego, con el comando bg le indicas que continúe su ejecución en segundo plano:
$ bg [1]+ find / -name "*.tmp" 2>/dev/null &
A partir de ese momento el proceso sigue corriendo y la terminal está disponible.
Traer un proceso al primer plano con fg
Cuando necesitas interactuar nuevamente con un proceso que está en segundo plano (por ejemplo, para proporcionar entrada o ver su salida en tiempo real), lo traes al primer plano usando fg. Si solo hay un trabajo en segundo plano, basta con escribir:
$ fg
Si hay varios trabajos, puedes especificar el número de trabajo:
$ fg %2
El proceso volverá a bloquear la terminal hasta que finalice o lo suspendas nuevamente con Ctrl+Z.
Ejemplos prácticos
- Compresión de archivos en segundo plano:
$ tar -czf copia.tar.gz /home/usuario/documentos & - Ejecución de un script largo y seguimiento de su salida:
$ ./script_largo.sh ^Z [1]+ Stopped ./script_largo.sh $ bg [1]+ ./script_largo.sh & $ jobs [1]+ Running ./script_largo.sh & $ fg
- Cambiar entre múltiples trabajos:
$ ping -c 100 8.8.8.8 & [1] 6789 $ sleep 60 & [2] 6790 $ jobs [1]- Running ping -c 100 8.8.8.8 & [2]+ Running sleep 60 & $ fg %1 # trae el ping al primer plano ^Z [1]+ Stopped ping -c 100 8.8.8.8 $ bg %1 # lo vuelve a segundo plano [1]+ ping -c 100 8.8.8.8 &
Consideraciones y buenas prácticas
- Los procesos en segundo plano siguen consumiendo recursos de CPU y memoria; vigila su uso en sistemas con limitaciones.
- Los trabajos que intentan leer desde la entrada estándar (
stdin) se detendrán automáticamente cuando intenten leer y no haya datos disponibles; en esos casos es necesario llevarlos al primer plano para proporcionar la entrada. - Utiliza el comando
jobspara listar los trabajos actuales y sus estados. - Si cierras la terminal mientras hay trabajos en segundo plano, estos recibirán la señal
SIGHUPy se terminarán, a menos que los hayas desasociado condisowno los hayas iniciado connohup. - Para procesos que deben seguir ejecutándose después de cerrar la sesión, combina
nohupcon&o usadisowndespués de ponerlos en segundo plano.
Conclusión
Dominar los comandos bg y fg te permite gestionar de forma eficiente la ejecución de tareas largas o que no requieren interacción constante, manteniendo la terminal libre para otras operaciones. Aprender a suspender, reanudar y cambiar entre primer y segundo plano es una habilidad fundamental para cualquier usuario o administrador de Linux que quiera trabajar de manera productiva desde la línea de comandos.


