Διαδικασίες ζόμπι στο Linux: Αποτρέψτε, βρείτε, αφαιρέστε, αποτρέψτε

15 λεπτά ανάγνωσης - 19 Μαΐου 2026

hero section cover
Πίνακας περιεχομένων
  • Διαδικασίες ζόμπι στο Linux: Πώς να τις εντοπίσετε και να τις αφαιρέσετε
  • Γιατί οι διαδικασίες ζόμπι έχουν σημασία στους διακομιστές
  • Πώς να εντοπίσετε διαδικασίες ζόμπι
  • Πώς να αφαιρέσετε τις διαδικασίες ζόμπι
  • Αποτροπή διαδικασιών ζόμπι
  • Συμπέρασμα
Κοινοποίηση

Μάθετε πώς να εντοπίζετε, να αφαιρείτε και να αποτρέπετε διεργασίες ζόμπι στο 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 ή TZ (αδρανής)
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 σας παρέχουν πλήρη έλεγχο της διαχείρισης των διεργασιών και της διαμόρφωσης του συστήματος.

Blog

Προτεινόμενα αυτή την εβδομάδα

Περισσότερα άρθρα
Διαδικασίες ζόμπι στο Linux: Αποτρέψτε, βρείτε, αφαιρέστε, αποτρέψτε

Διαδικασίες ζόμπι στο Linux: Αποτρέψτε, βρείτε, αφαιρέστε, αποτρέψτε

Μάθετε πώς να εντοπίζετε, να αφαιρείτε και να αποτρέπετε διεργασίες ζόμπι στο Linux. Εντολές, διορθώσεις κώδικα και συμβουλές παρακολούθησης για διαχειριστές διακομιστών.

15 λεπτά ανάγνωσης - 19 Μαΐου 2026

Λίστα ελέγχου σκλήρυνσης διακομιστών Linux

15 λεπτά ανάγνωσης - 8 Μαΐου 2026

Περισσότερα άρθρα
background image

Έχετε ερωτήσεις ή χρειάζεστε μια προσαρμοσμένη λύση

icon

Ευέλικτες επιλογές

icon

Παγκόσμια εμβέλεια

icon

Άμεση ανάπτυξη

icon

Ευέλικτες επιλογές

icon

Παγκόσμια εμβέλεια

icon

Άμεση ανάπτυξη