¿Qué es un demonio?

12

Escucho mucho hablar sobre Daemons ejecutándose en mi computadora Ubuntu, ¿qué son?

Marco Ceppi
fuente

Respuestas:

15

En resumen, un Daemon es un proceso en segundo plano .

Los demonios pueden ser simplemente programas normales que se ejecutan en segundo plano, sin embargo, la mayoría se crean al iniciar un proceso, bifurcarlo y salir del padre.

Bifurcar un proceso significa crear una copia exacta del mismo. El padre de ese proceso, si el padre real termina de inmediato, ahora es el proceso de inicio en /sbin/init, que es lo primero que se inicia en todos los sistemas operativos tipo Unix. Ahora, el proceso se denomina Daemon, no tiene TTY asociado.

Aquí hay un ejemplo de un demonio en Python:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

Todavía no es uno, estrictamente hablando. También tendría que cambiar el directorio de trabajo actual, la entrada y salida estándar prohibida a los archivos de registro, etc. Puedes leer los detalles sangrientos en este artículo de Wikipedia .

Si ejecuta el ejemplo, notará que, después de dos segundos, se imprime, a pesar de que el proceso que inició en la línea de comandos ha finalizado. La copia de este proceso se ejecuta 'por' init ahora.

Stefano Palazzo
fuente
8
Para ampliar esto, si viene a Linux desde Windows, puede pensar en los demonios como el equivalente * nix de los "servicios" de Windows.
nathwill
1
@ stefano-palazzo Dijiste "... no tiene TTY asociado", pero luego "... te darás cuenta, después de dos segundos se imprime ...". Pensé que desconectar el TTY significaba que no podías escribir en la terminal.
Jorge Bucaran
1
@JorgeBucaran Sí. La impresión es un poco traviesa. Todavía puede tener un identificador para la secuencia de salida estándar del tty que lo inició. Cuando abre un archivo (como / dev / stdout), obtiene un número (llamado descriptor de archivo), y eso es todo lo que necesita escribir mientras el proceso que se ha abierto todavía se esté ejecutando (puede ver archivos abiertos en /proc/*/fd). Un demonio con buen comportamiento se separará por completo del tty al ceder las asas para stdout, stderr y stdin.
Stefano Palazzo
1
@StefanoPalazzo ya veo. Uno puede retener una referencia al proceso std / out / err del padre y aún así desconectarse de él. Si puedo mantener arbitrariamente una referencia al TTY, entonces, ¿qué significa separar un proceso? Encontré < superuser.com/questions/178587/… > útil, pero aún no me queda claro.
Jorge Bucaran
1
@JorgeBucaran significa sobrescribir los procesos propios stdio (por ejemplo, utilizando dup2 ) con los nuevos que ha creado (como un archivo de registro). Aquí hay un ejemplo completo
Stefano Palazzo
1

En los sistemas operativos de computadora multitarea, un daemon es un programa informático que se ejecuta como un proceso en segundo plano, en lugar de estar bajo el control directo de un usuario interactivo. Tradicionalmente, los nombres de proceso de un demonio terminan con la letra d, para aclarar que el proceso es, de hecho, un demonio y para diferenciar entre un demonio y un programa de computadora normal. Por ejemplo, syslogd es el demonio que implementa la función de registro del sistema, y ​​sshd es un demonio que sirve a las conexiones SSH entrantes.

Como puedes ver la capa del Daemon

Tarifas Younis
fuente
2
¿De dónde es la cita?
Zanna