EnderUNIX Team.


EnderUNIX İpucu

Arkadaşıma gönder , Ana Sayfa

[ C/C++ ]

"Alt süreçler ve zombie'ler" - Barış Şimşek - (2005-01-13 17:22:44)   [4261]

Ana süreç fork yaptığında bir alt süreç oluşur. Alt süreçlerin akibetinin ne olduğunu ana süreç takip etmeli. Bunu da wait veya waitpid fonksiyonları ile gerçekleştirir.

Şayet bir alt süreç ana süreç tarafından takip edilmiyorsa, yani wait ile sonlanması beklenmiyorsa, alt süreç exit yaptıktan sonra zombie olur. Bir başka deyişle, ana sürecin wait ile beklemediği alt süreç sonlanınca zombie olur.

Bir programdan normal çıkış değerleri exit() ile verilir. Ancak anormal sonlanma durumunda kernel müdahele ederek sonlanma hakkında bilg içeren bir durum oluşturur. Daha sonra wait veya waitpid ile bu durumun ne olduğu ana süreçten öğrenilebilir.

Alt süreç ölmeden ana süreç ölürse, çekirdek alt süreçlerin parent process ID(PPID)'lerini 1 (yani ile süreç /sbin/init) yapar. Dolaysıyla bu alt süreçler init tarafından sahiplenilir. Init bu süreçler için wait() fonksiyonunu çağırarak zombie olmalarına engel olur.

wait, çağıran fonksiyonu alt süreç sonlanana kadar bloklar.

Alt süreç sonlandığında çekirdek tarafından SIGCHLD sinyali üretilir. Bu sinyal yakalandığı yerde wait edilerek ana sürecin tamamen blok olması engellenir. Çünkü wait çağırdığımızda zaten alt süreç wait'e dönmek üzeredir.

waitpid(), ana sürecin blok olmasını engelleyecek seçenek sunar.

Birden çok alt süreç olduğu durumlarda herhangi biri sonlandığında wait(), çağıran fonksiyona döner. Hangisinin sonlandığını dönen PID numarasından alabiliriz.


Arkadaşıma gönder , Ana Sayfa