Crear un demonio en Linux (con nohup)
Bien, no es la forma más “bonita”, pero sí una de las más efectivas. Si queremos lanzar una aplicación como un demonio de UNIX podemos usar el comando nohup. Con este comando estaremos:
- Ignorando la señal HUP, de esta forma permitimos que el programa continúe su ejecución después de que el usuario que lanzó el comando abandone la sesión.
- Almacenando la salida del programa (STDOUT) en un fichero texto. Así, si queremos saber qué está ocurriendo podemos leer el contenido del fichero nohup.out
Veamos cómo lanzarlo:
ahornero@6581-D:~$ nohup el_commando_o_programa
Como ejemplo, podemos lanzar lo siguiente:
ahornero@6581-D:~$ nohup sleep 1000 &
nohup: ignoring input and appending output to `nohup.out’
Abandonamos el terminal
ahornero@6581-D:~$ logout
Y volvemos a entrar. Ahora miramos qué PID tiene el programa en ejecución:
ahornero@6581-D:~$ ps aux | grep sleep
4076 4596 4076 4784 pty0 1002 13:01:36 /usr/bin/sleep
También podemos usar directamente pgrep y obtendremos directamente el PID:
ahornero@6581-D:~$ pgrep sleep
4076
Si queremos saber qué está ocurriendo hacemos un seguimiento del fichero nohup.out
ahornero@6581-D:~$ tail -f nohup.out
En este caso no obtendremos nada, ya que sleep no escribe nada por la salida estándar (ni por ninguna otra).
Para terminar, matamos el proceso de una forma más o menos elegante, mandando una interrupción al proceso:
ahornero@6581-D:~$ kill -SIGINT $(pgrep sleep)
También podréis usar directamente pkill o usar SIGKILL para, directamente, matarlo. Aquí os dejo una referencia de las señales en Linux (POSIX y ANSI).