Distribuciones Linux
0

Linux: Procesos en segundo plano

En linux es muy común el tener que trabajar o tener que ejecutar comandos que según como puede que tarden más de lo previsto o incluso el hecho de lanzar una aplicación que debe estar lanzada de manera permanente (o casi) mediante consola y sobre todo si hay lentitud en la red o estamos haciendo pruebas.

Para ello, siempre es mejor lanzar los procesos para que queden en un segundo plano y recuperarlos cuando sea necesario.

Vamos a ver algunas opciones para trabajar lo más ágil posible con procesos en un segundo plano y de paso, tenerlos controlados.

& y bg

Lo primero que hay que tener en cuenta es que esta opción, puede ser útil por el hecho de que se crea en segundo plano y lo podemos recuperar siempre que no salgamos de la sesión.

El motivo por el que no hay que salir de la sesión es muy simple, el proceso seguirá lanzado pero no será accesible, puesto que nuestro ID de sesión, cambiará.

Si añadimos un ampersand (&) al final del comando o script que queremos ejecutar, éste se ejecutará en segundo plano.

./script.sh &

En caso de ejecutar el comando de manera normal y luego nos damos cuenta de que tendría que ser en segundo plano, podemos cambiarlo pulsando CTRL+Z para suspender la ejecución del comando actual, y después ponemos el comando bg.

Este mismo proceso puede ser pasado a primer plano mediante el comando fg y en caso de que haya más de un comando en segundo plano, tendremos que poner el número del mismo.

fg 2

Nohup y &

Cuando se cierra una sesión en linux, el sistema manda una señal para matar todos los procesos que esté lanzando nuestro usuario (Señal SIGHUP).

Por lo tanto, aunque les pongamos el & al final, morirán.

Para evitar que esto suceda, hay que ejecutar el script o comando poniendo el comando nohup delante y lo que va a hacer es ignorar la señal de SIGHUP y redirigir toda la información correspondiente a un fichero llamado nohup.out

nohup ./script.sh &

Esta opción es muy útil cuando no hemos de interactuar con el proceso, puesto que al quedar el fichero de log, se puede ver el resultado con toda la información al respecto.

Screen

Screen es una aplicación que permite lanzar aplicaciones en segundo plano con un consumo de recursos muy reducido y controlado, de manera que podremos ir cambiando entre ellas incluso aunque cambie nuestro ID de sesión.

Hay que tener en cuenta que esta aplicación no suele venir instalada por defecto, por lo que hay que ser root o disponer de SUDO para poder instalarla.

sudo apt-get install screen

Una vez que tengamos instalado el aplicativo, solo hay que ejecutar el comando o script deseado como un parametro del propio screen

screen ./script.sh

Una vez que hemos lanzado el comando presionamos CTRL+A y después CTRL+D, lo que conseguiremos es que la sesión quede como Detached (como una sesión independiente) y nosotros podremos seguir trabajando.

Para poder recuperar la sesión, vamos a necesitar consultar primero que sesiones tenemos activas.

pi@MyPyCraft:/home/minecraft $ sudo screen -ls
There is a screen on:
1056.pts-0.MyPyCraft (03/04/17 18:10:28) (Detached)
1 Socket in /var/run/screen/S-root.

Por lo tanto, tendremos que recuperar la sesión 1056 y eso se hace usando el siguiente código.

screen -r 1056.pts-0.MyPyCraft

 

Esperamos que os sea tan útil como a nosotros y si tenéis algún otro programa o manera de trabajar con procesos en segundo plano, no dudes en comentar.