Ποια κατάσταση πρέπει να λάβει μια διαδικασία από τη διαδικασία γονέα για να γίνει ζόμπι;
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*.