Sobes.tech
Middle

Ποια κατάσταση πρέπει να λάβει μια διαδικασία από τη διαδικασία γονέα για να γίνει ζόμπι;

sobes.tech AI

Απάντηση από AI

Η διαδικασία γίνεται ζόμπι ή "φάντασμα διαδικασία" όταν ολοκληρώνει την εκτέλεσή της (μεταβαίνει στην κατάσταση EXIT_ZOMBIE), αλλά η εγγραφή της στον πίνακα διεργασιών εξακολουθεί να υπάρχει, περιμένοντας ο γονικός της διαδικασία να διαβάσει την κατάσταση τερματισμού της μέσω της συστημικής κλήσης wait() ή waitpid(). Μέχρι τότε, καταλαμβάνει ελάχιστους πόρους (πρακτικά μόνο την εγγραφή στον πίνακα διεργασιών), αλλά δεν απελευθερώνει πλήρως τους σχετιζόμενους πόρους.

Στον πίνακα διεργασιών, μια τέτοια διαδικασία εμφανίζεται συνήθως με τον δείκτη <defunct>.

# Παράδειγμα εξόδου της εντολής ps, που δείχνει μια ζόμπι διεργασία
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
someuser  1234  0.0  0.0      0     0 pts/0    Z+   10:00   0:00 [defunct_process]
...

Για να εξαφανιστεί η ζόμπι διεργασία, ο γονικός διαδικασία πρέπει να καλέσει wait() ή waitpid(). Αν ο γονικός τερματίσει πριν διαβάσει την κατάσταση των ζόμπι παιδιών του, αυτά τα παιδιά μετατρέπονται σε παιδιά της διαδικασίας init (με ID 1), η οποία καλεί αυτόματα wait() για τα παιδιά της, καθαρίζοντας έτσι τα ζόμπι.

Έτσι, η κύρια κατάσταση που λαμβάνει μια διαδικασία από τον γονικό της για να γίνει ζόμπι είναι η κατάσταση τερματισμού, την οποία ο γονικός δεν έχει ακόμη επεξεργαστεί μέσω των κλήσεων wait*.