Hola compañeros de la shell,
En esta entrada vamos a revisar como dejar lanzado un proceso de tal forma que se mantenga en ejecución aunque cerremos la shell desde la que lo hemos lanzado.
Para conseguir este objetivo, como casi todos los lectores sabréis, basta con utilizar el comando nohup seguido del comando y argumentos que deseemos ejecutar y terminando la sentencia con el caracter «&» para realizar una ejecución en segundo plano. Por ejemplo:
nohup sleep 5000 &
En el caso del ejemplo, sleep seguirá ejecutandose pese a que cerremos nuestro terminal gracias a nohup. Este comportamiento aplica casi siempre, y de ahí que escribamos esta entrada, para explicar qué podemos hacer en caso de que con nohup no sea suficiente.
Hay ocasiones en las que el programa que ejecutamos reconecta la señal SIGHUP de tal forma que, aunque utilicemos nohup, el programa terminará una vez cerremos la terminal desde la que lo estemos ejecutando. Para dar solución a este problema podemos utilizar el comando disown, después de ejecutar nuestro programa. Por ejemplo:
nohup rsync -aAhvz ./prueba/ ./prueba_2/ & ; disown $!
Recordemos: $! nos devuelve el PID del comando ejecutado anteriormente y disown elimina el proceso de la tabla de jobs, de tal manera que no se le enviará la señal SIGHUP aunque cerremos la shell en la que estamos trabajando actualmente.
Otra alternativa sería usar el programa screen.
A continuación un par de enlaces que pueden resultar interesantes en los que se trata este tema y se propone el uso de disown y screen como soluciones:
Aplicando solución basada en disown.
Aplicando solución basada en screen.
Espero que os sirva.
Nos vemos al otro lado de la pantalla negra.
