Πώς τερματίζετε μια διαδικασία zombie;
sobes.tech AI
Απάντηση από AI
Ένα διαδικασία zombie είναι μια διαδικασία που έχει ολοκληρώσει την εκτέλεσή της, αλλά συνεχίζει να καταλαμβάνει χώρο στον πίνακα διαδικασιών του συστήματος, επειδή η γονική διαδικασία της δεν έχει διαβάσει ακόμα τον κωδικό επιστροφής μέσω της κλήσης συστήματος wait().
Για να τερματίσετε μια διαδικασία zombie, πρέπει πρώτα να τερματίσετε τη γονική διαδικασία της. Όταν η γονική διαδικασία τερματίσει, η διαδικασία zombie θα υιοθετηθεί από τη διαδικασία init (ή το σύγχρονο αντίστοιχό της, όπως το systemd), η οποία θα εκτελέσει την απαραίτητη κλήση συστήματος wait() και θα αφαιρέσει το zombie από τον πίνακα διαδικασιών.
Βήματα για το τερματισμό μιας διαδικασίας zombie:
-
Ορίστε το PPID (ταυτότητα γονικής διαδικασίας) της διαδικασίας zombie.
# Αναζητήστε διαδικασίες zombie και τα PPID τους ps aux | awk '{ print $8, $2, $4 }' | grep ZΗ έξοδος θα είναι περίπου έτσι:
Z 1234 5678, όπου1234είναι το PID της διαδικασίας zombie, και5678είναι το PPID της γονικής διαδικασίας. -
Τερματίστε τη γονική διαδικασία. Χρησιμοποιήστε το PID της γονικής διαδικασίας που λάβατε στο προηγούμενο βήμα.
# Αναγκαστικά τερματίστε τη γονική διαδικασία kill -9 <PPID_γονικής_διαδικασίας>Χρησιμοποιήστε το σήμα
SIGKILL(-9) για να διασφαλίσετε το τερματισμό της γονικής διαδικασίας, αν το κανονικό σήμαSIGTERMδεν λειτουργεί.
Μετά το τερματισμό της γονικής διαδικασίας, το σύστημα θα αφαιρέσει αυτόματα το zombie. Σε σπάνιες περιπτώσεις, αν το πρόβλημα με τις διαδικασίες zombie προκαλείται από ένα βαθύ πρόβλημα πυρήνα, μπορεί να χρειαστεί επανεκκίνηση του διακομιστή.