Taller
>> Taller >> Jerarquía de procesos by Wakroo

Me llegó un mail hace un tiempo preguntando por la jerarquía de procesos de la que hablaba en el Curso de Iniciación a DIV y FENIX. Le respondí por mail y luego pensé que, ya que el texto estaba escrito, tampoco haría mal a nadie si lo colgaba. Así que aquí está lo que hice.

La jerarquía de procesos es como una familia. Sí, los procesos forman una familia y, como tal, hay padres, hijos, hermanos, tíos, sobrinos,... En realidad sólo se suelen usar los parentescos más directos, es decir, padre (father), hijo (son), hermano mayor (bigbro) y hermano menor (smallbro). Si no me he equivocado, todos los procesos tienen 4 variables locales (las que están entre paréntesis) con el código identificador de sus parientes cercanos.

Por lo tanto, si tiene el ID puede modificar las variables locales de sus familiares y hacer todo aquello que se puede hacer con el ID de un proceso. Pero, ¿cómo se establece la relación familiar? Pues de una manera lógica y sencilla: el que crea un proceso es el padre del creado y el creado es el hijo del creador. Así de fácil. El hermano mayor es el proceso que ha creado el padre justo antes que a ese proceso y el menor el siguiente que ha creado. Y con esto se forma el árbol genealógico completo.

La mayor utilidad que tiene es a la hora de mandar señales a los procesos, por ejemplo. Puedes hacer que un proceso elimine a su padre, dormirlo, congelarlo o volver a despertarlo. Lo más útil que se me ocurre en estos momentos es cuando creas una rama completa a partir de un proceso padre original. Esto te permite usar s_kill_tree, s_sleep_tree, s_freeze_tree y s_wakeup_tree. De esta manera afectas a ese proceso y a toda su descendencia. Si creas un proceso llamado, por ejemplo, juego() y desde ahí llamas a todos los demás procesos consigues una buena manera de pausar todo el juego para poder poner un menú durante la partida o lo que haga falta, simplemente haciendo signal(TYPE juego,s_freeze_tree) (puedes sustituir TYPE juego por el ID del proceso).

Incluyo una imagen que espero que sirva para aclarar las dudas que haya dejado mi explicación. Ahí escenario() es el padre de arbol(), pajaro() y nube(), que son sus hijos, a la vez que arbol() es el hermano mayor de pajaro() y nube() su hermano menor. Con los demás lo mismo. Si hay algo que no ha quedado claro escribidme a lordwakroo@yahoo.es e intentaré explicarlo de otra forma. Un saludo y que la Fuerza os acompañe.