Como desvincular una aplicación de la terminal en la cual se abrió en GNU/Linux

Introducción.

Cuando se inician aplicaciones desde una terminal en GNU/Linux sus procesos quedan ligados a la terminal, de manera que cuando esta se destruye (cierra) los procesos asociados también se terminan de manera ineludible.

Esto es particularmente inoportuno cuando se desea dejar ejecutándose una aplicación durante un largo periodo de tiempo sin supervisión ni interacción humana.  Esto es muy frecuente cuando se realiza administración de los servidores o se desea realizar tareas de larga duración como la transferencia de archivos.  En ese orden de ideas es necesario mantener la conexión y la terminal desde donde se ejecutó la aplicación abiertas hasta que termine el procedimiento.

Para evitar este problema existen varias alternativas de solución.  A continuación se expone el procedimiento de desvincular la aplicación de la terminal en la cual se invocó.

El problema.

Al ejecutar una aplicación en una terminal su proceso, representado por su PID (identificador de proceso) queda asociado con el de la terminal en la cual se ejecutó.

$ gedit &

[1] 2643

Por ejemplo, en el caso anterior, al ejecutar el programa gedit (en background) se puede apreciar que su PID es 2643.  Si se verifica la información de dicho proceso se obtienen los siguientes datos adicionales.

$ ps -fea | grep 2643 jimezam

2643  2576 0 Jun03 pts/1    00:00:00 gedit

Nótese que su proceso padre (segunda columna) es el 2576.  Si se solicita mayor información acerca de dicho proceso se obtiene lo siguiente.

$ ps -fea | grep 2576

jimezam   2576 2571  0 Jun03 pts/1    00:00:00 bash
jimezam   2643  2576 0 Jun03 pts/1    00:00:00 gedit
jimezam   2809  2576 0 00:17 pts/1    00:00:00 ps -fea
jimezam   2810  2576 0 00:17 pts/1    00:00:00 grep –color=auto 2576

De lo anterior se colige que dicho proceso corresponde con una terminal (bash) e inclusive se pueden apreciar los procesos que se desprenden de ella, en este caso los siguientes 3 procesos mostrados.

Si se termina el proceso 2576 se terminarán automáticamente entonces los procesos 2643, 2809 y el 2810.

La solución.

Como se mencionó inicialmente, la solución a esta situación corresponde con la desvinculación (detach) del proceso específico con la terminal del cual fue lanzado.  Esto se logra con un comando interno del Bash llamado disown de la siguiente manera.

$ disown -h 2643

Después de ejecutada esta instrucción, la terminal de orígen (en este caso con 2576 como PID) puede ser cerrada sin interferir con la ejecución del gedit del ejemplo (con 2643 como PID).

2 thoughts on “Como desvincular una aplicación de la terminal en la cual se abrió en GNU/Linux”

Leave a Reply

Your email address will not be published. Required fields are marked *