La creación y destrucción de procesos en
UNIX se ajusta a la filosofía de la manera más sencilla posible, así las
llamadas al sistema tienen el mínimo número de parámetros. Las llamadas
correspondientes a la creación, destrucción y bloque o espera de un proceso son
respectivamente: fork, exit y wait.
La llamada fork crea un nuevo proceso
hijo idéntico al proceso padre. Tienen la misma imagen de memoria, el mismo
bloque de control de proceso y los mismos archivos abiertos, aunque situados en
distintos espacios de memoria. Para poder distinguir a ambos procesos, la
llamada fork devuelve distintos valores, el hijo recibe un valor 0 y el padre
el PID del hijo.
La llamada exit finaliza un proceso.
Cuando se produce esta finalización del proceso hijo, se manda al sistema la
llamada wait, para que el padre se bloquee a la espera de la finalización del
hijo. Si el proceso hijo finalizara antes de que el padre recibiera esta
llamada, el proceso hijo se convertiría en un proceso en estado zombie, y hasta
que no se ejecute esta llamada wait el proceso no se eliminará. Para evitar la
acumulación de procesos UNIX prevé un límite de números de procesos zombie y
aquellos procesos hijos que se destruyen más tarde que sus procesos padres, al
quedar huérfanos sería el primer proceso del sistema (init) el que se encarga
de recoger su estado de finalización.
La llamada wait bloquea el proceso que
lo ha llamado hasta que uno de sus procesos hijos es destruido, por lo que si
el proceso no tiene hijos wait regresa y el valor devuelto es igual al PID de
dicho proceso hijo.
No hay comentarios:
Publicar un comentario