http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/ da un ejemplo de demonización de un proceso en bash:
$ nohup firefox& &> /dev/null
Si estoy en lo correcto, el comando es el mismo que "nohup and background a process". ¿Pero no es un demonio más que un proceso nohupped y de fondo?
¿Qué pasos faltan aquí para demonizar un proceso?
Por ejemplo, ¿no es necesario cambiar el proceso padre al demonizar un proceso? Si es así, ¿cómo se hace eso en bash? Todavía estoy tratando de entender una respuesta relacionada https://unix.stackexchange.com/a/177361/674 .
¿Qué otros pasos y condiciones?
Vea mi pregunta relacionada https://stackoverflow.com/q/35705451/156458
start-stop-daemon
Debian; Dejaré aquí un hilo relacionado del desbordamiento de pila stackoverflow.com/questions/16139940/… que es más interesante que la página de manual sin procesarRespuestas:
Del artículo de Wikipedia sobre daemon :
En un entorno Unix, el proceso padre de un demonio es a menudo, pero no siempre, el proceso init. Por lo general, un daemon se crea mediante un proceso que bifurca un proceso hijo y luego sale inmediatamente, lo que hace que init adopte el proceso hijo o que el proceso init inicie directamente el daemon. Además, un demonio lanzado al bifurcar y salir normalmente debe realizar otras operaciones, como disociar el proceso de cualquier terminal de control (tty). Tales procedimientos a menudo se implementan en varias rutinas de conveniencia, como daemon (3) en Unix.
Lea la página de manual de la
daemon
función.Al ejecutar un comando en segundo plano desde un shell que sale inmediatamente, el PPID del proceso se convierte en 1. Fácil de probar:
Como puede ver, el proceso es propiedad del PID 1, pero aún está asociado con un TTY. Si salgo de este shell de inicio de sesión, vuelvo a iniciar sesión y
ps
vuelvo a hacerlo , se convierte en TTY?
.Lea aquí por qué es importante desconectarse de TTY .
Usando
setsid
(parte deutil-linux
):Creo que ni siquiera tiene que redirigir stdin, stdout y stderr.
fuente
bash -c
contenedor, no hay TTY asociado con el proceso. Realmente es como lo demostró.echo "outer tty: $(tty)"; ls -la $(dirname $(tty)); bash -c 'echo "inner tty: $(tty)"; ls -la $(dirname $(tty));'
se mostrará que es exactamente el mismo TTY para ambos, pero el comportamiento demostrado de obtener un TTY?
todavía se produce a pesar de que nunca se está "desconectando del shell" ni cerrando el TTY.Un demonio, por su nombre, no es más que un programa que se ejecuta hasta 1. el sistema se apaga; 2. Se le pide que pare. Aparte de eso, no tiene un significado mágico.
En estas circunstancias, ejecutar un script bash en segundo plano con nohup puede clasificarlo como un proceso de demonio.
¿Qué esperas encontrar y no encontrar? Si tiene algún problema, indíquelo con un código de muestra y segmentos de datos de muestra para solicitar ayuda adicional. Su pregunta, tal como está ahora, es demasiado amplia / general.
fuente