2010-08-31 23 views
9

Sé que los daemons se ejecutan en segundo plano principalmente, es decir, requieren una interacción muy inferior del usuario.¿Cuáles son las diferencias de comportamiento entre un daemon y un proceso normal?

Wikipedia lists algunos de los tipos de demonios que comúnmente existe:

  • disociarse del terminal controlada
  • convertirse en un líder de la sesión
  • convertirse en un líder de grupo de procesos
  • El permanecer en un segundo plano por bifurcan y saliendo (una o dos veces). Esto se requiere a veces para que el proceso se convierta en un líder de sesión. También permite que el proceso principal continúe su ejecución normal. Este modismo a veces se resume con la frase "tenedor y muere"
  • Configurando el directorio raíz ("/") como el directorio de trabajo actual para que el proceso no mantenga ningún directorio en uso que pueda estar en un sistema de archivos montado (permitiendo que sea desmontado).
  • Cambiando la umask a 0 para permitir open(), creat(), et al. llama para proporcionar sus propias máscaras de permisos y no depender de la máscara u de la persona que llama
  • Cierre de todos los archivos abiertos heredados en el momento de la ejecución que el proceso principal deja abiertos, incluidos los descriptores de archivos 0, 1 y 2 (stdin, stdout, stderr). Los archivos necesarios se abrirán más tarde.
  • El uso de un archivo de registro, la consola, o/dev/null como stdin, stdout y stderr

Quiero saber si puede haber diferencias en el comportamiento de un demonio tan diferenciado de un proceso normal, aparte del que mencioné en la primera línea. Ambos tipos de procesos hacen su trabajo e interactúan con el usuario dependiendo de la cantidad de interacción que necesita para hacer su trabajo.

¿Hay más para los daemons que esto?

Respuesta

18

No realmente. Un daemon es solo un término para un proceso que se ejecuta continuamente y, por lo general, no está conectado a un terminal.

Los daemons no son una clase separada de procesos y no tienen privilegios o atributos especiales.

Hay una función C de BSD/Linux llamada daemon (man page), pero esta es simplemente una forma sencilla de separar el proceso de su terminal. Se llama así porque eso es lo que suelen hacer los daemons, y no al revés.

+2

así que si ejecuto un proceso desde un shell como '$ process &', ¿califica como daemon? – Lazer

+3

Yo diría que no, es solo un proceso de fondo. Todavía está asociado con su terminal, incluso si su salida se está suprimiendo temporalmente, y si el programa se ejecuta indefinidamente, lo más probable es que se haya escrito teniendo en cuenta la interactividad. Un daemon se separa automáticamente del terminal en el que se inicia y se escribe con la expectativa de no interactividad. –

1

La pregunta es un poco vago, pero lo intentaré de todos modos:

Técnicamente, los demonios son sólo procesa como cualquier otro. Por lo general, pero no están obligados a hacerlo, tienen descripciones de archivos misceláneos cerradas y otros comportamientos adecuados para procesos que duran mucho tiempo. Para un análisis de alto nivel de cómo se configuran la mayoría de los procesos daemon (en Python), consulte: http://www.noah.org/wiki/Daemonize_Python

Por lo tanto, las diferencias realmente se reducen al ciclo de vida y los usuarios. Daemon procesa en vivo durante largos periodos de tiempo, por lo general siempre que tenga un nivel de ejecución determinado. También suelen proporcionar servicios a otros procesos de todo el sistema, o procesos más altos que el proceso de ejecución del usuario promedio.

+0

No diría que suelen ser de todo el sistema, sino que podrían ser locales para una sesión de usuario determinada. – Christo

3

La diferencia clave entre una Proceso y un demonioes que un demonio 's padre es init - el primer proceso se inició durante el arranque * Nix. Y es por eso que un Daemon no está conectado a un terminal. Entonces, cuando cierres tu terminal, el sistema operativo no lo matará. Pero aún puede enviar señales a su Daemon.

+1

Puede iniciar o detener daemons. Incluso crea nuevos demonios. No son necesariamente iniciados por el init. – 0xc0de

Cuestiones relacionadas