Διαδικασίες ζόμπι στο Linux: Αποτρέψτε, βρείτε, αφαιρέστε, αποτρέψτε
15 λεπτά ανάγνωσης - 19 Μαΐου 2026

Μάθετε πώς να εντοπίζετε, να αφαιρείτε και να αποτρέπετε διεργασίες ζόμπι στο Linux. Εντολές, διορθώσεις κώδικα και συμβουλές παρακολούθησης για διαχειριστές διακομιστών.
Διαδικασίες ζόμπι στο Linux: Πώς να τις εντοπίσετε και να τις αφαιρέσετε
Μια διαδικασία ζόμπι είναι μια θυγατρική διαδικασία που έχει ολοκληρώσει την εκτέλεσή της, αλλά εξακολουθεί να καταλαμβάνει μια θέση στον πίνακα διαδικασιών του πυρήνα. Υπάρχει επειδή η γονική διαδικασία δεν έχει καλέσει wait() για να συλλέξει την κατάσταση εξόδου της. Οι ζόμπι δεν καταναλώνουν CPU ή μνήμη, αλλά κάθε μία κατέχει ένα PID. Αν συσσωρευτούν αρκετές, το σύστημά σας δεν θα μπορεί να δημιουργήσει νέες διεργασίες. Αυτή η ανάρτηση καλύπτει πώς να τις εντοπίσετε, να τις αφαιρέσετε και να αποτρέψετε την εμφάνισή τους εξαρχής.
Γιατί οι διαδικασίες ζόμπι έχουν σημασία στους διακομιστές
Μια μεμονωμένη διαδικασία ζόμπι είναι ακίνδυνη. Το πρόβλημα αρχίζει όταν συσσωρεύονται. Το Linux διαθέτει περιορισμένο χώρο PID: 32.768 σε συστήματα 32-bit, έως 4.194.304 σε συστήματα 64-bit. Εάν οι διαδικασίες ζόμπι γεμίσουν τον πίνακα διαδικασιών, ο πυρήνας δεν μπορεί να δημιουργήσει νέες διαδικασίες. Αυτό σημαίνει ότι δεν γίνονται νέες συνδέσεις, δεν δημιουργούνται νέα νήματα εργασίας, δεν γίνεται τίποτα νέο.
Οι διακομιστές ιστού όπως το Apache και το Nginx είναι ιδιαίτερα εκτεθειμένοι, επειδή δημιουργούν θυγατρικές διεργασίες για τη διαχείριση της κυκλοφορίας. Οι συγκριτικές αξιολογήσεις έχουν δείξει πτώση 48% στη διακίνηση όταν συσσωρεύονται ζόμπι σε έναν πολυάσχολο διακομιστή ιστού. Το 2019, μια διαρροή καναλιού Golang σε ένα pod DNS του Kubernetes δημιούργησε πάνω από 26.000 ζόμπι σε έναν μόνο κόμβο, γεμίζοντας τον πίνακα διεργασιών και προκαλώντας κατάρρευση της ανάλυσης DNS σε ολόκληρο το σύμπλεγμα.
Ο παρακάτω πίνακας δείχνει τις βασικές διαφορές μεταξύ μιας κανονικής διεργασίας και ενός ζόμπι:
| Χαρακτηριστικό | Κανονική διεργασία | Διαδικασία ζόμπι |
|---|---|---|
| Σύμβολο κατάστασης | R, S, D ή T | Z (αδρανής) |
| CPU / Μνήμη | Ενεργή χρήση | 0% / 0 (έχει ήδη τερματιστεί) |
| Είσοδος πίνακα διεργασιών | Μία υποδοχή | Μία θέση |
Απόκριση σε kill -9 | Τερματίζεται αμέσως | Καμία επίδραση (ήδη νεκρό) |
| Μνήμη πυρήνα | Πλήρης περιγραφέας διεργασίας | Μόνο ελάχιστη κατάσταση εξόδου |
Το κρίσιμο συμπέρασμα: δεν μπορείτε kill -9 ένα ζόμπι. Είναι ήδη νεκρό. Ο μόνος τρόπος για να το καθαρίσετε είναι να κάνετε τη γονική διεργασία να το συλλέξει, ή να τερματίσετε τη γονική ώστε init (PID 1) να το κληρονομήσει και να το «θερίσει» αυτόματα.
Πώς να εντοπίσετε διαδικασίες ζόμπι
Οι διαδικασίες-ζόμπι εμφανίζονται με ένα Z στη στήλη STAT και <defunct> δίπλα στο όνομα της εντολής. Καταγράψτε τις με:
ps aux | grep -w ZΓια να δείτε το αναγνωριστικό της γονικής διεργασίας (PPID), το οποίο θα χρειαστείτε για την κατάργηση:
ps -eo pid,ppid,stat,comm | grep -w ZΗ top εντολή αναφέρει επίσης τον συνολικό αριθμό ζόμπι στη γραμμή κεφαλίδας της. Για έναν γρήγορο μη διαδραστικό έλεγχο:
top -bn1 | grep zombieΕντοπισμός της γονικής διεργασίας με το pstree
Μόλις έχετε το PID ενός ζόμπι, εντοπίστε τον υπεύθυνο γονικό:
pstree -p -s <zombie_pid>Αυτό δείχνει την πλήρη γενεαλογία από init μέχρι το ζόμπι. Εάν pstree δεν είναι εγκατεστημένο, το ps auxf παρέχει μια παρόμοια προβολή δέντρου ASCII.
Μετρήστε τα ζόμπι για παρακολούθηση
Μια καθαρή μέτρηση που εξαιρεί την ίδια τη διαδικασία grep:
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Για συνεχή παρακολούθηση κατά τη διάρκεια της αντιμετώπισης προβλημάτων:
watch -n 1 'ps aux | grep -w Z | wc -l'Πώς να αφαιρέσετε τις διαδικασίες ζόμπι
Οι διαδικασίες-ζόμπι μπορούν να αφαιρεθούν μόνο με τη συλλογή της κατάστασης εξόδου τους. Αυτό σημαίνει ότι πρέπει να γίνει μέσω της γονικής διαδικασίας.
1. Βρείτε τη γονική διαδικασία.
ps -o ppid= -p <zombie_pid>2. Στείλτε σήμα στη γονική διαδικασία να καταργήσει τις θυγατρικές της.
kill -SIGCHLD <parent_pid>Αυτό λέει στη γονική διαδικασία να καλέσει wait() σε οποιαδήποτε τερματισμένα παιδιά. Είναι μια διαδικασία που δεν προκαλεί διακοπή και λειτουργεί με εφαρμογές που συμπεριφέρονται σωστά.
3. Εάν το SIGCHLD δεν λειτουργεί, επανεκκινήστε την υπηρεσία.
systemctl restart <service_name>4. Εάν ο γονέας δεν ανταποκρίνεται, τερματίστε τον.
kill <parent_pid>Ή αν αγνοεί το SIGTERM:
kill -9 <parent_pid>Όταν ο γονικός τερματιστεί, init (PID 1) ή systemd υιοθετήστε τα ορφανά ζόμπι και εξαλείψτε τα αμέσως. Να είστε προσεκτικοί σε συστήματα παραγωγής. Η τερματισμός του γονικού τερματίζει επίσης όλα τα ενεργά παιδιά του.
5. Επαληθεύστε τον καθαρισμό.
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Αν ο αριθμός είναι 0, είστε εντάξει.
Αποτροπή διαδικασιών ζόμπι
Διαχείριση θυγατρικών διεργασιών στον κώδικά σας
Η βασική αιτία των περισσότερων συσσωρεύσεων ζόμπι είναι μια γονική διεργασία που δεν καλεί ποτέ wait(). Διορθώστε το στην πηγή:
- C: Ορίστε
signal(SIGCHLD, SIG_IGN);για να απορρίπτετε αυτόματα τις πληροφορίες εξόδου των θυγατρικών, ή χρησιμοποιήστε έναν χειριστή σημάτων μεwaitpid(-1, NULL, WNOHANG)για ασύγχρονη συλλογή. - Python: Χρησιμοποιήστε
subprocess.run(), το οποίο περιμένει αυτόματα. Εάν χρησιμοποιείτεPopen, καλέστεproc.wait()ρητά. - Bash: Προσθέστε
waitστο τέλος των σεναρίων που εκκινούν εργασίες στο παρασκήνιο.
Ρυθμίστε σωστά το systemd
Για υπηρεσίες που διαχειρίζεται το systemd, αυτές οι ρυθμίσεις αποτρέπουν τη συσσώρευση ζόμπι:
KillMode=control-groupεξασφαλίζει ότι όλες οι θυγατρικές διεργασίες τερματίζονται μαζί όταν σταματά η υπηρεσία.TimeoutStopSecδίνει χρόνο στη γονική διεργασία να τερματίσει τις θυγατρικές πριν το systemd στείλει SIGKILL.WatchdogSecεπανεκκινεί αυτόματα τις υπηρεσίες που δεν ανταποκρίνονται, εντοπίζοντας περιπτώσεις όπου η γονική διαδικασία κολλάει και σταματά να τερματίζει τις θυγατρικές.
Παρακολουθήστε τον πίνακα διεργασιών σας
Ρυθμίστε μια εργασία cron που εκτελείται κάθε 15 λεπτά για να μετρά τα ζόμπι και να ειδοποιεί εάν ο αριθμός υπερβαίνει ένα όριο:
ps aux | awk '$8 ~ /Z/' | wc -lΠαρακολουθήστε επίσης τη χρήση του πίνακα διεργασιών σας συγκρίνοντας τον τρέχοντα αριθμό με /proc/sys/kernel/pid_max. Εάν υπερβαίνει το 80%, διερευνήστε το πριν γίνει πρόβλημα. Μερικά παροδικά ζόμπι κατά τη διάρκεια της κανονικής λειτουργίας δεν είναι λόγος ανησυχίας. Ένας αυξανόμενος αριθμός που δεν επιστρέφει στο μηδέν υποδηλώνει ένα σφάλμα στην εφαρμογή που χρειάζεται διόρθωση.
Συμπέρασμα
Οι διαδικασίες ζόμπι είναι νεκρά παιδιά που δεν έχουν καθαριστεί. Δεν χρησιμοποιούν CPU ή μνήμη, αλλά κατέχουν PID, και ένας πλήρης πίνακας διαδικασιών εμποδίζει τον διακομιστή σας να κάνει οτιδήποτε χρήσιμο.
- Βρείτε τις με
ps aux | grep -w Zκαι εντοπίστε τη γονική διεργασία μεpstree. - Αφαιρέστε τις στέλνοντας
SIGCHLDστη γονική διεργασία, επανεκκινώντας την υπηρεσία ή τερματίζοντας τη γονική διεργασία ως έσχατη λύση. - Αποτρέψτε τις γράφοντας κώδικα που καλεί το
wait(), ρυθμίζοντας σωστά το systemd και παρακολουθώντας τον πίνακα διεργασιών σας.
Εάν εκτελείτε φόρτους εργασίας υψηλής κυκλοφορίας και χρειάζεστε αξιόπιστη υποδομή με πλήρη πρόσβαση root, οι αποκλειστικοί διακομιστές της FDC σας παρέχουν πλήρη έλεγχο της διαχείρισης των διεργασιών και της διαμόρφωσης του συστήματος.

Διαδικασίες ζόμπι στο Linux: Αποτρέψτε, βρείτε, αφαιρέστε, αποτρέψτε
Μάθετε πώς να εντοπίζετε, να αφαιρείτε και να αποτρέπετε διεργασίες ζόμπι στο Linux. Εντολές, διορθώσεις κώδικα και συμβουλές παρακολούθησης για διαχειριστές διακομιστών.
15 λεπτά ανάγνωσης - 19 Μαΐου 2026
Λίστα ελέγχου σκλήρυνσης διακομιστών Linux
15 λεπτά ανάγνωσης - 8 Μαΐου 2026

Έχετε ερωτήσεις ή χρειάζεστε μια προσαρμοσμένη λύση
Ευέλικτες επιλογές
Παγκόσμια εμβέλεια
Άμεση ανάπτυξη
Ευέλικτες επιλογές
Παγκόσμια εμβέλεια
Άμεση ανάπτυξη