miércoles, 21 de marzo de 2012

Proceso DAEMON y ZOMBIE





PROCESO DAEMON



Los daemons (o demonios) no son más que un proceso que se ejecuta en segundo plano. Estos demonios ejecutan diferentes funciones y proporcionan ciertos servicios, pero sin la interacción del usuario; son procesos de los que no "notamos" su ejecución.

Los demonios pueden ser iniciados al arrancar el sistema, al entrar en un runlevel (nivel de ejecución) determinado, o simplemente cuando nosotros los iniciemos. Veremos entonces de qué modo podemos controlar nosotros mismos los demonios (iniciarlos, pararlos, etc) y cómo podemos hacer que se inicien automáticamente. 


Iniciando y parando los demonios o daemons


Los programas que ejecutamos como demonios pueden estar ubicados en cualquier parte del disco, pero tienen un punto en común: todos utilizan un script para ser iniciados/parados, y estos scripts se encuentran en el directorio: /etc/init.d/


Sabiendo esto, la sintaxis habitual para iniciar/parar demonios es:


/etc/init.d/<nombre_demonio> start (para iniciar el demonio)

/etc/init.d/<nombre_demonio> stop (para detenerlo) 

/etc/init.d/<nombre_demonio> restar(para reiniciarlo)  



Todo esto puede parecer un poco confuso, pero vamos a ver un ejemplo práctico para poner nosotros nuestro demonio. Imaginemos que tenemos un programa que queremos que se ejecute siempre que arranque el sistema y se quede en ejecución como demonio. Haríamos lo siguiente:
  1. Crearnos un script según al sintaxis explicada anteriormente que nos permita iniciar y parar el programa que queremos ejecutar. Lo llamaremos, por ejemplo,miscript.
  2. Nos logueamos como root, copiamos el script a /etc/init.d y le damos permiso de ejecución:
    $ su
    # cp miscript /etc/init.d/
    # chmod u+x /etc/init.d/miscript
  3. Creamos los enlaces en los runlevels adecuados: haremos que se inicie en el runlevel 5 (X11) y en el runlevel 3 (multiusuario sin X) y que se detenga en los runlevels 6 y 0 (reiniciar y apagar):
    # ln -s /etc/init.d/miscript /etc/rc5.d/S99miscript
    # ln -s /etc/init.d/miscript /etc/rc3.d/S99miscript
    # ln -s /etc/init.d/miscript /etc/rc6.d/K01miscript
    # ln -s /etc/init.d/miscript /etc/rc0.d/K01miscript
    Lo iniciamos con la mínima prioridad para dejar que se inicien antes los demonios más importantes, y lo paramos con la máxima, para que se detenga antes que los demonios más importantes.

Con esto hemos conseguido que nuestro programa se inicie al arrancar la máquina (ya que normalmente arranca en el runlevel 5 si tenemos instaladas las X o en el 3 encaso contrario) y que se detenga al apagarla o reiniciar. Realmente los enlaces para detener el demonio al apagar o reiniciar la máquina no son necesarios, ya que el demonio se terminará igualmente, pero siempre es mejor que termine en el orden adecuado.

Apunte final


Podemos cambiar el runlevel por defecto (el runlevel en el que quedamos una vez inicada la máquina) modificando en el fichero /etc/inittab la siguiente línea:

id:5:initdefault:

El segundo campo corresponde al runlevel por defecto. En este caso es el 5 (iniciamos con X) pero podemos cambiarlo (por ejemplo a 3 si no queremos que se inicien las X automáticamente).  








PROCESO ZOMBIE

En sistemas operativos basados en UNIX, un proceso zombie (también llamado proceso difunto), es un proceso que ha completado su ejecución, pero que todavía tiene una entrada en la tabla de procesos.
Esta entrada todavía se necesita para permitir al proceso que inició el proceso (ahora zombie) pueda leer su estado de salida. El comando kill no tiene efecto sobre un proceso zombie.

Cuando un proceso finaliza, toda la memoria y recursos asociados con este son desasignados para que puedan ser usados por otros procesos. De todas maneras, la
 entrada del proceso permanece en la tabla de procesos. El proceso padre puede leer el estado de salida del proceso hijo ejecutando la llamada del sistema wait. Luego el estado de zombie es eliminado.

Después de que el zombie es eliminado, el ID del proceso y la
 entrada en la tabla de procesos pueden ser reusados. De todas maneras, si un proceso padre falla en llamar un wait, el zombie permanecerá en la tabla de procesos (en ciertas situaciones esto puede ser deseable, por ejemplo, en el caso de que el padre cree otro hijo para asegurar que no será localizado en el mismo ID de proceso).

Un proceso zombie no es lo mismo que un proceso huérfano. Este último es un proceso que permanece en ejecución, pero su padre ha muerto.

Los procesos zombies son identificados en la
 salida 
del comando "ps" con la presencia de la letra Z en la columna STAT.

No hay comentarios:

Publicar un comentario