next up previous contents
Next: INPUT/OUTPUT eszközöket vezérlo Up: Rendszerhívások Previous: POSIX signal-szemantika

Még egy kicsit a folyamatokról

A késobbiekben bemutatott példaprogramok (pl. majd a TCP alapú konkurrens szerver) muködésének megértéséhez fontos tisztában lenni azzal, hogy mi történik miután egy folyamat meghal (végrehajtja az exit() rendszerhívást vagy kill signalt küld önmagának, stb ...), hogy szerezhet errol tudomást a szülo folyamat.

Egy szülo-folyamat egy gyermek-folyamat befejezodésére a wait() rendszerhívással várakozhat. Egyetlen paramétere egy int típusú objektumra mutató pointer, ahova (a magasabb helyiértéku byteba) a meghalt gyermek exit-státusza kerül (ami 0 szokott lenni, ha nem volt hiba; egyébként nem 0, de ez inkább egy konvenció, aminek a betartása nem kötelezo) - ha a pointer nem NULL-pointer. Visszatérési értéke egyenlo a befejezodott gyermek-folyamat azonosítójával (ha van ilyen). Ha a folyamatnak nincs egyetlen (futó vagy befejezodött) gyermeke, akkor a visszatérési értéke -1.

A következo esetek lehetségesek miután egy gyermek-folyamat végrehajtotta az exit() rendszerhívást, ami után nincs visszaút:

Még egy fontos dolog van, amin a UNIX készítoinek el kellett gondolkodniuk: mi legyen akkor, ha a szülo-folyamat hal meg elobb?

Ekkor a gyermekhez tárolt szülo-folyamat azonosító mezo érvénytelen folyamat-azonosítót tartalmaz! Ezt úgy oldották meg, hogy bevezettek egy speciális (1-es azonosítójú) folyamatot, az init folyamatot (ez indítja el a terminálokon a login: folyamatokat). Az "árva" gyermek-folyamatoknak ez lesz szülo-folyamatukként tárolva. Ez majd idonként figyeli, és megtisztítja a "halott árva zombie" folyamatok által lefoglalt processztábala-bejegyzésektol a processz-táblát. (Az init folyamat sosem hajt végre exit() rendszerhívást.)



next up previous contents
Next: INPUT/OUTPUT eszközöket vezérlo Up: Rendszerhívások Previous: POSIX signal-szemantika



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996