Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Marco teórico:
DAEMON
Un Daemon (Disk And Execution Monitor) es un proceso que se ejecuta en segundo plano
y no es interactivo (no puede ser controlado por el usuario directamente). Por lo que este
proceso se ejecuta como background. [1] [2]
Estos procesos se ejecutan de forma continua en el sistema por lo que pueden ser
ejecutados varias veces lo cual también permite ser reiniciado si se lo desea matar.
Características
Creación de demonios
Para crear un Daemon se debe cumplir el primer paso que es crear un proceso hijo y
terminar el proceso padre:
En el momento que termina el proceso padre el hijo es adoptado o acogido por init. El
resultado hace pensar a la Shell que el comando fue terminado con [éxito permitiendo que
el proceso hijo se ejecute de manera independiente y en segundo plano.
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Init es el primer proceso del sistema, es el que se inicia para que se puedan crear los
Daemons necesarios para el funcionamiento del sistema.
Cambiar umask
Todos los procesos tienen una máscara que indica que permisos tienen estos al crear un
archivo, por lo que si se utilizase open() se comparan los permisos especificados con las
máscaras y se desactivarán efectivamente los que en la máscaras se indiquen.
Umask() se hereda de padre a hijos por lo que su valor por defecto es el de la Shell que
lanzó el Daemon, por lo que este no sabrá que permisos tendrán estos archivos al crear
este proceso y para poder evitar esto se puede autorizar todos los permisos con el
comando umask(0).
Desarrollo
Este programa ayuda al servidor con las funciones que necesita para convertirse en un
daemon, dichas funciones son las siguientes:
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Como inicio se deberá importar las librerías necesarias para que dicho programa no lance
ningún tipo de error.
En este programa se usa watchdog, por lo que este heredará la tabla de descriptores
abiertos con los canales por defecto iniciales, de igual manera si tuviere algunos sockets
abiertos este también los heredaría, por lo que se debe borrar la tabla de descriptores
abiertos para que pueda empezar desde cero.
Se debe cambiar el directorio para que no se esté trabajando en cualquier lado, sino en un
lugar previamente asignado.
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Se debe utilizar umask para poder cambiar los privilegios, para que el usuario no tenga
ningún tipo de negación de servicios, por lo que se dará permisos de ejecución y lectura a
un grupo y para el resto de usuarios no se dará ningún permiso.
Se debe realizar la apertura de los descriptores estándar, para las secuencias estándar al
archivo /dev/null
Se usará la exclusión mutua, por lo que se tilizará también locks para poder acceder de
manera ordenada a los recursos para que no se destruyan los procesos y poder ponerlos
en cola a la espera de ser atendido.
Luego se puede observar que hay 3 tipos de señales las cuales realizan lo siguiente:
SIGCHLD, detendrá el proceso hijo, esperará, se lo procesará con la función que necesite
SIGHUP, reinicia el proceso
SIGTERM, finaliza el proceso de manera segura
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Programa TCPechoDaemond.c
Al igual que el programa anterior se implementa el watchdog, que vigila al servidor, si este
fallara se mandaría una señal SIGCHLD, por lo que watchdog se dará cuenta que no existe
y creará un hijo automáticamente para reemplazar al proceso que murió.
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Se debe incluir una función de midaemon() y también habrá un socket que acepte a los
clientes entrantes y se les asignará un hijo para que estos sean atendidos.
El servicio que se ofrece “echo” devolverá las cadenas de texto que le envíen.
Resultados
Al correr el programa TCPechoDAEMONd este espera a que los clientes se conecten
Con el comando netstat -an | grep 10007 se puede ver el estado del servidor
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Conclusiones
1. Bibliografía