Ejecuta procesos en segundo plano gracias a Screen

Me atrevo a decir que la mayoría de los usuarios de los sistemas GNU/Linux (sea cual sea la distro) desconocemos una gran parte de los comandos del sistema.

Primero porque mucho de los comandos nos son irrelevantes ya que se usan para tareas específicas y para un trabajo específico. Otras veces los desconocemos por el siemple hecho de no saber que existen.

Uno de esos comandos es Screen. Screen en realidad no solo es un comando sino es una aplicación que viene por defecto en la mayoría de las distribuciones GNU/Linux, y no me atrevo a decir en todas, porque no conozco todas.

Que hace screen? Simple, nos da la posibilidad de generar una terminal alternativa ejecutándose en primer o segundo plano.

Y de qué me sirve eso? Bueno, pensá por ejemplo lo siguiente: Estás en la casa de un amigo y te olvidaste de ejecutar un proceso en tu PC de tu casa, por ejemplo un bot de Telegram. Entonces te conectás a tu PC desde la de tu amigo vía SSH. Como el bot de Telegram se ejecuta continuamente, necesitás tener una terminal abierta constantemente, pero, ¿como hacés estando afuera de tu casa?. Generás una screen, ejecutás el bot tranquilamente, dejás corriendo el proceso en segundo plano haciendo el dettach de la screen (ya les voy a mostrar como), te desconectás en la PC de tu amigo y listo. Solucionado.

Antes de que me maten, les voy a explicar como hacer eso de una manera sencilla.

Creando una Screen: La creación de una screen es súmamente fácil. Lo conveniente es darle un nombre a cada Screen más que nada para tener un orden y saber que se está ejecutando. El comando para crear una screen es el siguiente:

screen1

Con ese comando vamos a tener creada una screen con el nombre prueba_bot a la cual instantáneamente vamos a acceder.

Al estar dentro de la screen vamos a poder trabajar de manera totalmente normal. Asi que, supongamos que ejecutamos un proceso que está constantemente ejecutàndose, como un bot de Telegram. Si llegamos a cerrar esa terminal el proceso se va a terminar como si se tratara de cualquier otra terminal, pero eso es algo que no queremos, entonces, lo que vamos a hacer es mandar esa screen a segundo plano. Cómo? Haciendo un Detach. Esto se hace con una combinación de teclas, las cuales son:

Ctrl+a (el sistema esperará a que presiones una tecla). Presiona la letra d la cual hará el detach

Con ésto volveremos a la terminal principal y vamos a ver un mensaje parecido a ésto:

screen2

Nótese que el nombre de la screen que acabamos de detachear (si, conjugué una palabra que no existe porque está en inglés, jeje) es el que nosotros le pusimos.

Listando screens creadas: Ahora, si tenemos más de una, como sabemos cuales son o cuántas son? Con el comando:

screen3

El parámetro -list nos va a listar todas las screens que tengamos creadas y nos dirá el estado en el que está como lo muestra la siguiente imagen:

screen4

Ahí vemos el estado de las screens, una está Attacheada, es decir, usandose en primer plano y las demás están en segundo plano.

Como usar una screen: Entonces, si tenemos una screen en segundo plano, ¿como hacemos para poder acceder a ella?. Es super simple, primero que nada tenemos que saber cual es el nombre de la screen. En el caso de que no le hayas puesto nombre, la aplicación genera uno con un número de proceso parecido a este:

screen6

Si bien, cuando le damos un nombre también la aplicación le agrega un número de proceso, es bueno tener las screens creadas con nombre para una fácil identificación. Volviendo a lo anterior, para poder usar una screen una vez que le hayamos hecho un Detach tenemos que hacer lo siguiente:

$ screen -r <nombre_de_la_screen>

Con ese comando vamos a acceder a la screen indicada con el nombre que le dimos. El parámetro -r se refiere a resumir la screen, es decir, hace un Rettach de la screen creada.

Una vez que tengamos nuestro proceso corriendo en segundo plano, podemos ver que lo está haciendo correctamente usando SCREEN si ejecutamos el monitor del sistema top o htop. Yo prefiero htop.

screen7

Como ven, el proceso se está ejecutando sin problemas a través de una screen. Con esto nos damos cuenta el poder de Screen, porque no solo se puede hacer eso sino muchas cosas más. Si quieren ver los parámetros completos de la aplicación pueden ejecutar el comando “man screen” desde una terminal para tener acceder al completo manual de screen.

Escrito el October 17, 2016