Sobes.tech
Middle

Πώς τερματίζετε μια διαδικασία zombie;

sobes.tech AI

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

Ένα διαδικασία zombie είναι μια διαδικασία που έχει ολοκληρώσει την εκτέλεσή της, αλλά συνεχίζει να καταλαμβάνει χώρο στον πίνακα διαδικασιών του συστήματος, επειδή η γονική διαδικασία της δεν έχει διαβάσει ακόμα τον κωδικό επιστροφής μέσω της κλήσης συστήματος wait().

Για να τερματίσετε μια διαδικασία zombie, πρέπει πρώτα να τερματίσετε τη γονική διαδικασία της. Όταν η γονική διαδικασία τερματίσει, η διαδικασία zombie θα υιοθετηθεί από τη διαδικασία init (ή το σύγχρονο αντίστοιχό της, όπως το systemd), η οποία θα εκτελέσει την απαραίτητη κλήση συστήματος wait() και θα αφαιρέσει το zombie από τον πίνακα διαδικασιών.

Βήματα για το τερματισμό μιας διαδικασίας zombie:

  1. Ορίστε το PPID (ταυτότητα γονικής διαδικασίας) της διαδικασίας zombie.

    # Αναζητήστε διαδικασίες zombie και τα PPID τους
    ps aux | awk '{ print $8, $2, $4 }' | grep Z
    

    Η έξοδος θα είναι περίπου έτσι: Z 1234 5678, όπου 1234 είναι το PID της διαδικασίας zombie, και 5678 είναι το PPID της γονικής διαδικασίας.

  2. Τερματίστε τη γονική διαδικασία. Χρησιμοποιήστε το PID της γονικής διαδικασίας που λάβατε στο προηγούμενο βήμα.

    # Αναγκαστικά τερματίστε τη γονική διαδικασία
    kill -9 <PPID_γονικής_διαδικασίας>
    

    Χρησιμοποιήστε το σήμα SIGKILL (-9) για να διασφαλίσετε το τερματισμό της γονικής διαδικασίας, αν το κανονικό σήμα SIGTERM δεν λειτουργεί.

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