Sobes.tech
Junior — Middle

Πώς μπορεί να τερματιστεί ή να αναγκαστεί η διακοπή μιας διαδικασίας zombie στο λειτουργικό σύστημα;

sobes.tech AI

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

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

Δεν μπορεί να τερματιστεί άμεσα μια ζόμπι διαδικασία, καθώς έχει ήδη τερματίσει. Για να απαλλαγείτε από το ζόμπι, πρέπει:

  • Να τερματίσετε ή να επανεκκινήσετε τη γονική διαδικασία που δεν έχει καλέσει wait. Σε αυτή την περίπτωση, το init (PID 1) θα γίνει ο νέος γονέας του ζόμπι και θα καλέσει αυτόματα wait, καθαρίζοντάς το.
  • Να στείλετε το σήμα SIGCHLD στη γονική διαδικασία ώστε να επεξεργαστεί την κατάσταση τερματισμού των παιδιών διαδικασιών.

Παράδειγμα εντολής για αποστολή σήματος στον γονέα:

kill -s SIGCHLD <PID_γονέα>

Αν ο γονέας δεν ανταποκρίνεται, μπορείτε να τον τερματίσετε:

kill -9 <PID_γονέα>

Μετά από αυτό, το init θα αναλάβει και θα καθαρίσει το ζόμπι.