sábado, 18 de febrero de 2012

Tipos de procesos en Linux: Child, daemon, orphan y zombie

Los procesos son algo fundamental en un sistema operativo. Casi todas las actividades de un sistema hacen uso de procesos para llevar a cabo sus tareas. De hecho gracias a los procesos el sistema operativo está "operativo", es decir, funcionando correctamente y por un gran puñado de ellos el mismo nos tiene disponible de forma instantánea los recursos físicos (hardware) de nuestra computadora. 

Es muy probable que al utilizar el comando top para visualizar los procesos activos del sistemas te hayas fijado que en la parte superior hay una línea que dice cuántos procesos en total hay en ejecución, cuántos están dormidos (sleeping), detenidos (stopped) y zombie. Estas denominaciones hacen referencia a los estados de dichos procesos en un momento determinado. A continuación describiremos los diferentes procesos por su tipo o estado.
Child (hijos)
Son procesos creados por otro proceso durante su ejecución. Usualmente los procesos child son creados para ejecutar un binario desde un proceso existente, con la llamada del sistema fork(). Los procesos normalmente son creados para ejecutarse a través de un shell o terminal. En dicho caso el shell se convierte en proceso padre y el proceso ejecutado se convierte en hijo. En sistemas tipo Unix/Linux cada proceso tiene un padre excepto el proceso init.

Daemon (demonios)
Son tipos especiales de procesos que se ejecutan en segundo plano y están relacionados con el sistema operativo y no tienen shell asociado. Estos corren con permisos de root y usualmente proveen servicios. El no tener shell asociado se logra separando el proceso del shell, creando un proceso nuevo y terminando el proceso padre (el shell que lo inició). Desde el momento en que su proceso padre es terminado el proceso de hace independiente (ya no es más un proceso child) y es tomado por el proceso init el cual lo convierte en un daemon.


Orphan (huérfanos)
Usualmente un proceso crea un proceso hijo (child) y cuando el proceso hijo termina una señal es emitida al proceso padre para que pueda hacer todo lo requerido cuando el proceso hijo es terminado. Pero hay situaciones en las que los procesos padres son matados (killed). En dicho caso el proceso hijo queda huérfano y entonces es tomado por el proceso init. Aún así el proceso cuyo padre fue matado sigue siendo llamado huérfano ya que su padre original no existe.

Zombie
Cuando un proceso child o hijo es terminado o es completada su ejecución, luego su entrada en la tabla de procesos se mantiene hasta que el proceso padre obtenga la información del estado del proceso hijo terminado. Hasta entonces el proceso terminado entra en estado zombie y es conocido como proceso zombie. Cuando un proceso es terminado toda la memoria y recursos asociados con dicho proceso son liberados pero la entrada del mismo en la tabla de procesos aún existe. Una seña SIGCHILD es enviada al proceso padre (ha sido terminado). Comúmente el manejador de esta señal en el proceso padre ejecuta una llamda de espera que obtiene el estado de salida del proceso terminado y entonces la entrada del proceso zombie es borrada de la tabla de procesos.


1 comentario:

  1. Visitar mi Blog de Dibujos por Ordenador en: "artedeluisi.blogspot.com" y también mi vídeo en Youtube: "los mejores diseños gráficos de luis arqueros ( 1996 - 2006 ).

    ResponderEliminar