videos ver son segun reales que poderosos mas los lista infierno fisicamente demonios demonio como biblia abdiel daemon fork

daemon - son - ver demonios



¿Por qué los demonios se bifurcan? (4)

Soy consciente de que algunos (¿todos?) Demonios se bifurcan cuando están empezando. Tengo la impresión de que esto es para ejecutar los procesos secundarios como usuarios menos privilegiados, especialmente si el demonio es algo así como un servidor HTTP.

¿Por qué esto es necesario? ¿No se puede iniciar un proceso y quitar sus privilegios sin forzar un proceso secundario? ¿Es "obligatorio" para forking, o hay alguna otra razón especial (que no sea para ejecutar varios procesos de trabajo infantil)?

Soy nuevo en esto y apreciaría toda la ayuda que pueda obtener.


Creo que los daemons se bifurcan por varias razones:

  1. Una razón es separar el proceso de cualquier shell que lo inicie . Algunas conchas (Bash, por ejemplo) matan a los niños al salir, a menos que se tomen precauciones especiales específicas para la concha. Bifurcar es una forma genérica de evadir esto.

  2. Otra razón es informar que el demonio se inició correctamente .

    Supongamos que no se bifurca. ¿Cómo sabrías que el demonio se ha iniciado con éxito? Simplemente no puede leer y analizar la salida del daemon, ya que los programas de administración de daemon deberían hacerlo de una manera genérica. Así que la única manera es obtener el código de retorno del programa.

    De hecho, si un daemon no se iniciara (por ejemplo, no pudo encontrar el archivo de configuración), lo sabría de inmediato. Pero bueno, si un demonio se ha iniciado con éxito, ¡puede que nunca regrese! Por lo tanto, el administrador de su daemon no puede saber si el daemon aún está intentando iniciarse o si se inició y está funcionando. Fork solucionaría el problema, y ​​el programa de forking devolvería el éxito si una fork funcionaba bien.

  3. En cuanto a los privilegios, execve después de execve es mucho menos seguro que hacerlo antes de execve . Aquí hay otra razón por la cual tenedor es útil.


Los daemons deben bifurcarse dos veces porque deben ser independientes de otros procesos, es decir, no hay forma de matar al daemon matando a otro proceso, y deben ejecutarse en segundo plano, que no está conectado a un terminal.

Al arrancar, el demonio se bifurca y el padre muere. Esto hace que el proceso bifurcado sea un hijo de init , así que básicamente es independiente de otros procesos.

En la segunda bifurcación, el niño ya no es un líder de proceso y se separa del terminal.

Otras buenas prácticas pueden aplicarse, leer el código fuente de un demonio simple puede ser perspicaz.


Para respaldar lo que dijo daramarak, del artículo de Wikipedia :

En un entorno Unix, el proceso padre de un demonio es a menudo (pero no siempre) el proceso de inicio (PID = 1). Los procesos generalmente se convierten en demonios al forzar un proceso secundario y luego hacer que su proceso principal se cierre de inmediato, lo que provoca que init adopte el proceso secundario. Esta es una vista algo simplificada del proceso, ya que generalmente se realizan otras operaciones, como disociar el proceso del daemon de cualquier tty controlador. Rutinas de conveniencia como el demonio (3) existen en algunos sistemas UNIX para ese propósito.

Básicamente, el proceso debe desasociarse de otros procesos y de terminales y demás.


Tenía la impresión de que esto se hizo para mantener al demonio completamente desconectado de cualquier otro proceso (como un shell o similar). Al bifurcar y salir del proceso principal, el proceso de inicio del sistema "adoptará" el proceso Orphaned.