Procesos en segundo plano con Linux
Table of Contents
ToggleIntroducción
Cuando ejecutamos alguna acción o comando, la salida por pantalla del mismo (ya sea stdout o stderr) se ejecuta en primer plano (FG: Foreground). También, podemos especificar alguna salida en segundo plano con linux (BG: Background).
Recordemos que Linux (o cualquier otro sistema operativo), por defecto, se encuentra ejecutando varios procesos en segundo plano al iniciar el sistema y durante el funcionamiento del mismo. Por lo tanto, y generalmente, las acciones que ejecutemos como usuario mediante alguna herramienta, o comando, la veremos en primer plano.
¿Cómo funciona esto?
Cuando ejecutamos un proceso, normalmente lo hacemos en primer plano, cuya interacción se basa en que se acabe este trabajo o le mandemos una señal con alguna indicación. Por ejemplo, cuando un usuario ejecuta el comando ls -l, se mostrará por pantalla el resultado, y hasta que no acabe el comando, no se podrá ejecutar ningún otro comando.
Para ejecutar un proceso en segundo plano, simplemente se ha de añadir al final del comando el signo ampersand ( & ), esta opción permitirá ejecutar más de un comando a la vez.
Ejemplos:
Buscar en todo el disco el resultado STDOUT y STDERR y guardarlo en resultado.txt
# find / > resultado.txt 2>&1 &
Otra manera de enviar a segundo plano un proceso es pulsando las teclas CTRL z y luego ejecutar el comando bg
# find / > resultado.txt 2>&1
^Z
[1]+ Stopped find / > resultado.txt 2>&1
# bg %1
[1]+ find / > resultado.txt 2>&1 &
Volver a primer plano el proceso:
# fg %(num. de proceso)
Listar los proceso enviados a segundo plano:
# jobs
Listar los proceso enviados a segundo plano y mostrar el PID:
# jobs –l
Volver a primer plano un trabajo determinado:
# fg %2
Listar los proceso enviados a segundo plano y mostrar el PID:
# jobs
Para enviar un trabajo (detenido) a segundo plano:
# bg %2
Matar un trabajo determinado:
# kill %2
Ejemplo gráficos:
Creamos el script script.sh, cuya función es la de ejecutar el comando date cada 60s en el archivo info.txt. Luego lo ponemos en ejecución y vemos que su numero identificador es [1] y el numero de proceso es 19739
Vemos desde otra terminal, con el comando tail –f, que se está ejecutando a la perfección en segundo plano y en el archivo info.txt
Utilizamos el comando Jobs –l para ver el estado del proceso y vemos que se encuentra en ejecución (Running). Luego lo pasamos a primer plano con el comando fg %1 y, finalmente lo detenemos con Ctrl Z (Stopped)
Ahora utilizamos el comando bg %1 para pasarlo de vuelta a segundo plano, y lo comprobamos con el comando Jobs (Running). Finalmente le enviamos la señal de cancelación con el comando kill -10 %1 (lo mismo que hacer kill SIGUSR1 %1). Y este nos devuelve como resultado “Saliendo..” cuya respuesta estaba desarrollada en el script.
Algunas Herramientas
A continuación estaremos especificando algunos comandos prácticos para la manipulación de procesos en segundo plano con Linux.
Comando nohup
La función de este comando es permitir que se ejecute un proceso evitando que deje de ejecutarse, esto se utiliza cuando uno trabaja con una terminal remota y quiere asegurarse de que un proceso siga ejecutándose aunque se corte la conexión. Sin embargo no suele ser tan utilizado hoy en dia
# nohup cp -rf /etc /backup &
Comando screen
El comando screen es una herramienta mucho más sofisticada que nohup, y con más funcionalidades. Al ejecutarlo:
# screen
Pareciera no hacer nada, sin embargo, se ha iniciado una sesión del programa. Supongamos que ejecutamos el comando anterior del ejemplo de nohup .
# cp -rf /etc /backup
Si nos tenemos que ir pero queremos que el comando se siga ejecutando, usamos el atajo de teclado Ctrl+a , d (es decir: Ctrl+a , soltamos y presionamos la tecla d ).
Al hacerlo aparecerá un mensaje en pantalla similar al siguiente:
[detached from 20014.pts-7.hope]
De esta manera “desconectamos la terminal”. Para volver a conectarla haríamos así:
# screen -r 20014
Si no sabemos el número o nombre de la sesión de screen, sencillamente ejecutamos el comando:
# screen –ls
Comando tmux
El comando tmux es una alternativa a screen.
Para iniciar una sesión:
# tmux
Para desconectar una terminal se utiliza el atajo de teclado Ctrl+b , d (esdecir Ctrl+b soltamos y presionamos la tecla d ).
# tmux new-session -s monitoreo
Para reconectar la terminal:
# tmux attach -t monitoreo
Si no sabemos el número de terminal podemos usar el siguiente comando:
# tmux list-sessions
0: 1 windows (created Tue Sep 5 20:13:24 2022) [108×27]
2: 1 windows (created Tue Sep 5 20:13:24 2022) [108×27]
Cada sesión tiene ventanas y estas, a su vez, pueden contener paneles.
Para crear un panel con orientación vertical se usa el atajo ‘ Ctrl+b , % ’ y ‘ Ctrl+b , “ ’ para crear un panel debajo de otro.
Otras funciones:
- Rotar entre paneles: Ctrl+b, flechas del teclado
- Crear una ventana: Ctrl+b , c
- Ir a la ventana previa: Ctrl+b , p
- Ir a la ventana siguiente: Ctrl+b , n