Τα προγράμματα που έχουν κακή σύνταξη ή την εκτέλεση άσχημα να αφήσετε διαδικασίες ζόμπι καραδοκεί στο εσωτερικό του υπολογιστή σας Linux. Μάθετε πώς δημιουργούνται ζόμπι, και πώς μπορείτε τελικά να θέσει τους για να ξεκουραστούν.
Πώς Διαδικασία μελών εργασίες για το Linux
Linux, βέβαια, πρέπει να παρακολουθείτε όλες τις εφαρμογές και δαίμονες που εκτελούνται στον υπολογιστή σας. Ένας από τους τρόπους που το κάνει αυτό είναι με τη διατήρηση του πίνακα διαδικασίας. Αυτή είναι μια λίστα των δομών στη μνήμη του πυρήνα. Κάθε διεργασία έχει μια καταχώριση σε αυτόν τον κατάλογο που περιέχει κάποιες πληροφορίες σχετικά με αυτό.
Δεν υπάρχει μια μεγάλη σε κάθε ένα από τα επιτραπέζια διαδικασίας δομές. Κρατούν το ID της διεργασίας , Μερικά άλλα στοιχεία δεδομένων, και ένας δείκτης στο μπλοκ ελέγχου της διαδικασίας (PCB) για την εν λόγω διαδικασία.
Είναι η πλακέτα που κρατά τις πολλές λεπτομέρειες του Linux θα πρέπει να αναζητήσετε ή να ρυθμίσετε για κάθε διαδικασία. Το PCB είναι επίσης ενημερώνεται δημιουργείται μια διαδικασία, δεδομένου του χρόνου επεξεργασίας και τελικά καταστράφηκε.
Το Linux PCB περιέχει πάνω από 95 πεδία.
Είναι ορίζεται
ως μία δομή που ονομάζεται
task_struct.h
, Και είναι πολύ πάνω από 700 γραμμές. Το PCB περιλαμβάνει τους ακόλουθους τύπους πληροφοριών:
- κράτος διαδικασία : Οι καταστάσεις που περιγράφονται παρακάτω.
- Αριθμός διαδικασία : Μοναδικό αναγνωριστικό του μέσα στο λειτουργικό σύστημα.
- Μετρητής προγράμματος : Όταν αυτή η διαδικασία είναι δίπλα πρόσβαση στο CPU, το σύστημα θα χρησιμοποιήσει αυτή τη διεύθυνση για να βρείτε την επόμενη εντολή της διαδικασίας που πρέπει να εκτελεστούν.
- μητρώα : Ο κατάλογος των μητρώων επεξεργαστή που χρησιμοποιείται από αυτή τη διαδικασία. Ο κατάλογος μπορεί να περιέχει τους συσσωρευτές, τα μητρώα δείκτη και δείκτες στοίβα.
- Άνοιγμα λίστας αρχείων : Τα αρχεία που σχετίζονται με αυτή τη διαδικασία.
- CPU Προγραμματισμός Πληροφορίες : Χρησιμοποιείται για να καθορίσει πόσο συχνά και για πόσο χρονικό διάστημα, ο χρόνος επεξεργασίας CPU απονέμεται σε αυτή τη διαδικασία. Η προτεραιότητα της διαδικασίας, δείκτες σε ουρές προγραμματισμό, και άλλες παραμέτρους σχεδιασμού πρέπει να καταγράφονται στο PCB.
- Memory Information Management : Στοιχεία σχετικά με τη μνήμη αυτή η διαδικασία χρησιμοποιεί, όπως η αρχή και το τέλος διευθύνσεις της μνήμης της διαδικασίας, και οι δείκτες στις σελίδες της μνήμης.
- I / O Πληροφορίες Κατάσταση : Συσκευές Οποιοδήποτε εισροών ή εξόδου που χρησιμοποιείται από την διεργασία.
Το «κράτος Διαδικασία» μπορεί να είναι οποιοδήποτε από τα ακόλουθα:
- R: Ένα τρέξιμο ή εκτελέσιμη διεργασία. Τρέξιμο σημαίνει ότι λαμβάνει κύκλους της CPU και της εκτέλεσης. Μια εκτελέσιμη διεργασία είναι έτοιμη να τρέξει και αναμονής για μια υποδοχή CPU.
- ΜΙΚΡΟ: Μια διαδικασία του ύπνου. Η διαδικασία περιμένει για μια δράση για την πλήρη, όπως μία ενδο ή εξόδου λειτουργία, ή για έναν πόρο να καταστούν διαθέσιμα.
- ΡΕ: Η διαδικασία βρίσκεται σε αδιάλειπτη κατάσταση του ύπνου. Είναι χρησιμοποιώντας μια φραγή κλήσεων συστήματος και δεν μπορεί να συνεχιστεί μέχρι να ολοκληρωθούν οι κλήσεις συστήματος. Σε αντίθεση με το «Sleep» κατάσταση, μια διαδικασία σε αυτή την κατάσταση δεν θα ανταποκρίνονται στα μηνύματα μέχρι η κλήση συστήματος έχει ολοκληρωθεί και η εκτέλεση έχει επιστρέψει στη διαδικασία.
-
T:
Η διαδικασία έχει περατωθεί (σταματήσει) επειδή έλαβε το
SIGSTOPσήμα. Το θα απαντήσει μόνο στοSIGKILLήSIGCONTσήματα, τα οποία σκοτώνουν είτε τη διαδικασία ή να δώσει εντολή να συνεχίσει, αντίστοιχα. Αυτό είναι τι συμβαίνει όταν αλλάζετε από σε πρώτο πλάνο (fg) προς το Ιστορικό (bg)καθήκοντα. -
Ζ:
διαδικασία Α Zombie. Όταν μια διαδικασία ολοκληρώνεται, να μην απλά εξαφανίζονται. Απελευθερώνει κάθε μνήμη είναι με τη χρήση και την ίδια αφαιρεί από τη μνήμη, αλλά και τη θέση της στον πίνακα διαδικασία και PCB παραμένουν. κατάστασή του έχει οριστεί σε
EXIT_ZOMBIE, Και η μητρική της διαδικασίας της ειδοποιείται (από τοSIGCHLDσήματος) ότι η διαδικασία παιδί έχει τελειώσει.
Στην κατάσταση ζόμπι, η γονική διεργασία καλεί μία από τις
Περίμενε()
οικογένειες των λειτουργιών
όταν δημιουργείται η διαδικασία του παιδιού. Στη συνέχεια περιμένει μια κρατική αλλαγή στη διαδικασία του παιδιού. Έχει σταματήσει η παιδική διαδικασία, συνέχισε ή σκοτώθηκε από ένα σήμα; Έχει τερματιστεί τρέχοντας με τη φυσική ολοκλήρωση του κώδικα του;
Εάν η αλλαγή του κράτους είναι αυτή που σημαίνει ότι η διαδικασία του παιδιού έχει σταματήσει να λειτουργεί, ο κωδικός εξόδου του έχει διαβάσει. Στη συνέχεια, το PCB του παιδιού καταστρέφεται και η καταχώρισή του στον πίνακα επεξεργασίας αφαιρείται. Στην ιδανική περίπτωση, όλα αυτά συμβαίνουν με την αναλαμπή ενός ματιού και οι διαδικασίες στο κράτος ζόμπι δεν υπάρχουν για πολύ καιρό.
ΣΧΕΤΙΖΕΤΑΙ ΜΕ: Πώς να εκτελέσετε και να ελέγξετε τις διαδικασίες φόντου στο Linux
Τι προκαλεί διαδικασίες ζόμπι στο Linux;
Μια κακώς γραπτή γονική διαδικασία μπορεί να μην καλέσει το
Περίμενε()
Λειτουργία όταν δημιουργείται η διαδικασία του παιδιού. Αυτό σημαίνει ότι τίποτα δεν παρακολουθεί τις κρατικές αλλαγές στη διαδικασία του παιδιού και το
Sigchld
το σήμα θα αγνοηθεί. Ή ίσως μια άλλη εφαρμογή επηρεάζει την εκτέλεση της γονικής διαδικασίας, είτε λόγω κακού προγραμματισμού είτε σε κακόβουλη πρόθεση.
Ωστόσο, εάν η γονική διαδικασία δεν παρακολουθεί για κρατικές αλλαγές στη διαδικασία παιδιού, η σωστή υπηρεσία καθαριότητας συστήματος δεν θα συμβεί. Η PCB και η καταχώρηση στον πίνακα επεξεργασίας δεν θα αφαιρεθεί όταν τερματίζεται η διαδικασία του παιδιού. Αυτό έχει ως αποτέλεσμα το κράτος ζόμπι να μην αφαιρείται ποτέ από το PCB.
Τα ζόμπι χρησιμοποιούν ένα κομμάτι μνήμης, αλλά συνήθως δεν δημιουργούν πρόβλημα. Η καταχώρηση στον πίνακα επεξεργασίας είναι μικρή, αλλά, μέχρι να κυκλοφορήσει, το αναγνωριστικό διαδικασίας δεν μπορεί να επαναχρησιμοποιηθεί. Σε ένα λειτουργικό σύστημα 64 bit, αυτό είναι απίθανο να προκαλέσει τυχόν προβλήματα επειδή το PCB είναι πολύ μεγαλύτερο από την καταχώρηση πίνακα διαδικασίας.
Ένας τεράστιος αριθμός ζόμπι θα μπορούσε, ενδεχομένως, να επηρεάσει την ποσότητα της μνήμης που είναι δωρεάν για άλλες διαδικασίες. Εάν έχετε πολλά ζόμπι, όμως, έχετε ένα σοβαρό πρόβλημα με τη γονική εφαρμογή ή ένα σφάλμα λειτουργικού συστήματος.
Πώς να αφαιρέσετε τις διαδικασίες ζόμπι
Δεν μπορείτε να σκοτώσετε μια διαδικασία ζόμπι επειδή είναι ήδη νεκρό. Δεν θα ανταποκριθεί σε κανένα σήμα, επειδή έχει αφαιρεθεί από τη μνήμη - δεν υπάρχει πουθενά να στείλετε ένα
Sigkill
σήμα. Μπορείτε να δοκιμάσετε να στείλετε το
Sigchld
Σήμα στη γονική διαδικασία, αλλά αν δεν λειτουργούσε όταν τερμάτισε η διαδικασία του παιδιού, είναι απίθανο να εργαστεί τώρα, είτε.
Η μόνη αξιόπιστη λύση είναι να σκοτώσει τη γονική διαδικασία. Όταν τερματίζεται, οι διαδικασίες του παιδιού της κληρονομούνται από το
μέσα σε αυτό
διαδικασία, η οποία είναι η πρώτη διαδικασία που θα τρέξει σε ένα σύστημα Linux (το αναγνωριστικό της διαδικασίας είναι 1).
ο
μέσα σε αυτό
Η διαδικασία εκτελεί τακτικά την απαραίτητη καθαρισμό των ζόμπι, έτσι ώστε να τους σκοτώσει, απλά πρέπει να σκοτώσετε τη διαδικασία που τα δημιούργησε. ο
μπλουζα
Η εντολή είναι ένας βολικός τρόπος για να δείτε αν έχετε οποιοδήποτε ζόμπι.
Πληκτρολογήστε τα εξής:
Κορυφή
Αυτό το σύστημα έχει οκτώ διαδικασίες ζόμπι. Εμείς
μπορεί να απαριθμήσει αυτά
χρησιμοποιώντας το
ΥΣΤΕΡΟΓΡΑΦΟ
εντολή
και το σωληνώσει
egrep
. Και πάλι, οι διαδικασίες ζόμπι έχουν μια κρατική σημαία του "Z", και συνήθως θα δείτε επίσης "Defides".
Πληκτρολογήστε τα εξής:
PS AUX | EGREP "Z | Απολύμανση"
Οι διαδικασίες ζόμπι παρατίθενται.
Αυτός είναι ένας πολύχρωμος τρόπος για να ανακαλύψετε τα αναγνωριστικά της διαδικασίας των ζόμπι από την κύλιση προς τα εμπρός και πίσω
μπλουζα
. Βλέπουμε επίσης ότι μια αίτηση που ονομάζεται "Badprg" δημιούργησε αυτά τα ζόμπι.
Το αναγνωριστικό διαδικασίας του πρώτου ζόμπι είναι 7641, αλλά πρέπει να βρούμε το αναγνωριστικό διαδικασίας της γονικής της διαδικασίας. Μπορούμε να το κάνουμε με τη χρήση
πάλι. Θα χρησιμοποιήσουμε την επιλογή εξόδου (
ΥΣΤΕΡΟΓΡΑΦΟ
-
) να πει
ΥΣΤΕΡΟΓΡΑΦΟ
για να εμφανιστεί μόνο το αναγνωριστικό της διαδικασίας γονέα και, στη συνέχεια, το περάστε με το
ppid =
σημαία.
Η διαδικασία που θέλουμε να βρούμε θα υποδεικνύεται με τη χρήση του
-Π
(Διαδικασία) Επιλογή και στη συνέχεια διέρχεται στο αναγνωριστικό διαδικασίας του ζόμπι.
Επομένως, πληκτρολογούμε την ακόλουθη εντολή για να αναζητήσουμε τις πληροφορίες της διαδικασίας για τη διαδικασία 7641, αλλά θα αναφέρει μόνο το αναγνωριστικό της γονικής διαδικασίας:
PS -O PPID = -P 7641
Μας είπαν το αναγνωριστικό γονικής διαδικασίας είναι 7636. Μπορούμε τώρα να αναφέραμε αυτό χρησιμοποιώντας
ΥΣΤΕΡΟΓΡΑΦΟ
για μια ακόμη φορά.
Θεωρούμε ότι αυτό ταιριάζει με το όνομα της μητρικής διαδικασία από την προηγούμενη. Για να σκοτώσει τη διαδικασία μητρική, χρησιμοποιήστε την επιλογή SIGKILL με την εντολή kill ως εξής:
σκοτώσει -SIGKILL 7636
Ανάλογα με τον ιδιοκτήτη της μητρικής διαδικασίας, μπορεί επίσης να χρειαστεί να χρήση
sudo
.
Ζόμπι δεν είναι τρομακτικό ...
... εκτός αν είστε σε μια τεράστια ορδή. Λίγα δεν είναι τίποτα για να ανησυχείτε για και μια απλή επανεκκίνηση θα τους εξαφανίσουν.
Ωστόσο, αν παρατηρήσετε ότι μια εφαρμογή ή διαδικασία είναι πάντα ωοτοκίας ζόμπι, αυτό είναι κάτι που πρέπει να εξετάσουμε. πιθανότατα απλώς ένα ατημέλητα γραπτή πρόγραμμα αυτό, η περίπτωση κατά την οποία, ίσως υπάρχει μια ενημερωμένη έκδοση που καθαρίζει σωστά μετά από τις διαδικασίες του παιδιού της.