Αναγκαστικά τερματισμός διεργασιών με κακή συμπεριφορά χρησιμοποιώντας αυτές τις εντολές Linux
Για να εξηγήσετε την έννοια μιας «Διαδικασίας» με τα πιο απλά λόγια είναι ότι πρόκειται για μια εκτέλεση οποιασδήποτε εφαρμογής ή προγράμματος στο σύστημά σας. Ενδέχεται να εκτελείτε πολλές εφαρμογές ταυτόχρονα, όπως περιήγηση, ακρόαση μουσικής στο τερματικό σας κ.λπ. Υπάρχουν πολλές διεργασίες παρασκηνίου που σχετίζονται με αυτές τις εφαρμογές που εκτελούνται από τον χρήστη.
Κάθε εφαρμογή ή πρόγραμμα που εκτελείται στο σύστημά σας δημιουργεί πολλαπλές διεργασίες που σχετίζονται με τη μεμονωμένη εφαρμογή σας. Μερικές φορές αυτό μπορεί να είναι πρόβλημα και η μόνη επιλογή που έχετε είναι να απαλλαγείτε από αυτές τις διαδικασίες.
Η «θανάτωση» μιας διαδικασίας είναι μια χρήσιμη επιλογή που σας παρέχει το Linux για να σταματήσετε τις συνεχείς διαδικασίες, είτε πρόκειται για διαδικασία προσκηνίου είτε για διαδικασία παρασκηνίου. Σε αυτό το άρθρο, θα εξετάσουμε τις εντολές όπως σκοτώνω
, pkill
και killall
για να αναγκάσετε να τερματίσετε οποιαδήποτε διαδικασία σε ένα σύστημα.
Γιατί να σκοτώσετε μια διαδικασία;
Η κατανόηση της έννοιας της θανάτωσης μιας διαδικασίας είναι σημαντική πριν προχωρήσετε σε αυτό το σεμινάριο. Η δολοφονία μπορεί να φαίνεται ένας πολύ βάναυσος τρόπος έκφρασης της έννοιας, αλλά αυτό που μεταφορικά σημαίνει είναι η βίαιη ματαίωση μιας διαδικασίας.
Τώρα, γιατί να ματαιώσετε ή να σταματήσετε μια συνεχιζόμενη διαδικασία; Όταν εκτελούνται πολλές διεργασίες στο παρασκήνιο, όλες ή λίγες από αυτές ενδέχεται να δυσλειτουργούν και να προκαλέσουν κακή συμπεριφορά του συστήματός σας. Αυτό καθυστερεί τις συνεχιζόμενες εργασίες σας, καθώς η διαδικασία δυσλειτουργίας μπορεί να παγώσει το σύστημά σας για λίγο.
Μερικές φορές, η διακοπή όλων των διαδικασιών κακής συμπεριφοράς φαίνεται να είναι η μόνη επιλογή για την αποκατάσταση της κανονικότητας στο σύστημά σας. Το Linux σάς επιτρέπει να σκοτώσετε μια διαδικασία χρησιμοποιώντας το pid
ή το όνομα της διαδικασίας.
Χρησιμοποιώντας το pgrep
εντολή
Οι περισσότεροι από τους χρήστες Linux είναι εξοικειωμένοι με το grep
εντολή. ο pgrep
η εντολή μπορεί να χρησιμοποιηθεί σε παρόμοιες γραμμές του grep
.
pgrep
εντολή όταν χρησιμοποιείται, εμφανίζει το pid
της διαδικασίας που εκτελείται όπως καθορίζεται στην εντολή. Αυτή η εντολή θα αποδειχθεί πολύ χρήσιμη κατά τη χρήση του pkill
εντολή.
Γενική Σύνταξη:
pgrep [επιλογές] [μοτίβο]
Σημαντικές επιλογές διαθέσιμες με το pgrep
εντολή
Επιλογή | Περιγραφή |
-u | Αναγνωριστικό διαδικασίας λίστας που ανήκει σε συγκεκριμένο χρήστη |
-ντο | μετρήστε τον αριθμό των διαδικασιών αντιστοίχισης |
-ΕΓΩ | λίστα μόνο ονομάτων διεργασιών |
-ένα | λίστα της πλήρους διαδρομής του ονόματος της διαδικασίας |
Ας δείξουμε τη χρήση του pgrep
εντολή χρησιμοποιώντας ένα παράδειγμα.
pgrep -u gaurav gnome
Εδώ, θέλουμε να δούμε το pids
του gnome διαδικασίας που ανήκει στον χρήστη «gaurav». Επιλογή -u
σας επιτρέπει να παραθέσετε το pids
των διαδικασιών που ανήκουν σε συγκεκριμένο χρήστη. Σε αυτήν την περίπτωση, ο χρήστης gaurav.
Παραγωγή:
gaurav@ubuntu:~$ pgrep -u gaurav gnome 1752 1755 1909 1922 2021 2576 4279 gaurav@ubuntu:~$
Καθώς προχωράμε με αυτό το σεμινάριο, pgrep
Η εντολή θα μας βοηθήσει να επιβεβαιώσουμε εάν η διαδικασία έχει σβήσει ή αν εξακολουθεί να εκτελείται.
Ας περάσουμε τώρα στο pkill
εντολή και την εκτέλεσή της.
Χρησιμοποιώντας pkill
εντολή
Μπορείτε να χρησιμοποιήσετε το pkill
εντολή στο Linux για να σκοτώσει τη διαδικασία χρησιμοποιώντας το όνομα της διαδικασίας. Ακόμα κι αν δεν γνωρίζετε το pid
κάποια διαδικασία, ακόμα και τότε μπορείτε να σκοτώσετε τη συγκεκριμένη διαδικασία χρησιμοποιώντας το pkill
εντολή.
Οι διεργασίες μπορούν να καθοριστούν με το πλήρες όνομά τους ή το μερικό όνομα κατά τη χρήση του pkill
εντολή. Ακόμα κι αν εισαγάγετε το μερικό όνομα της διαδικασίας, το pkill
Η εντολή θα αντιστοιχίσει όλες τις διεργασίες που εκτελούνται με το αντίστοιχο όνομα που έχετε εισαγάγει στην εντολή.
Σύνταξη:
pkill [επιλογές][process_name_pattern]
Παράδειγμα:
Ας εμφανίσουμε τις διεργασίες που εκτελούνται αυτήν τη στιγμή χρησιμοποιώντας το μπλουζα
εντολή. Μπορείτε επίσης να χρησιμοποιήσετε το ΥΣΤΕΡΟΓΡΑΦΟ
εντολή για τη λίστα των διεργασιών.
μπλουζα
κορυφή - 14:24:02 επάνω 3:12, 1 χρήστης, μέσος όρος φόρτωσης: 0,29, 0,48, 0,58 Εργασίες: 221 συνολικά, 1 τρέξιμο, 172 κοιμούνται, 0 σταμάτησαν, 1 ζόμπι %CPU(s): 5,6 us, 1,0 sy , 0,0 ni, 92,9 id, 0,4 wa, 0,0 hi, 0,1 si, 0,0 st KiB Mem : 3928240 συνολικά, 610456 δωρεάν, 2233152 χρησιμοποιημένα, 1084632 buff/cache KiB Swap συνολικά: 8874, 4083 1187268 αποτέλεσμα Mem PID ΧΡΗΣΤΗ PR NI Virt ΑΠΕ SHR S% CPU% ΜΕΜ TIME + Command 4077 Gaurav 20 0 3312128 673480 118360 S 19,6 17,1 15: 13.23 περιεχόμενο Web 3712 Gaurav 20 0 3953008 453544 116476 S 4,0 11,5 9: 28.39 MainThread 2010 Gaurav 20 0 4084232 111096 45024 S 1.7 2.8 3: 14.85 gnome-shell 1197 ρίζας 20 0 1039612 33704 22988 S 1.0 0.9 3: 04,42 Xorg 1426 CouchDB 20 0 3772396 16908 2520 S 0,7 0,4 1: 50.83 beam.smp 3288 Gaurav 20 0 722480 25048 18272 S 0.7 0.6 0: 06,84 gnome-terminal- 3915 Gaurav 20 0 2804900 231524 111228 S 0.7 5.9 0: 54,42 Περιεχόμενο Web 4146 Gaurav 20 0 3017924 245304 120604 S 0.7 6.2 2: 01.21 Περιεχόμενο Web 4417 Gaurav 20 0 2964208 234396 119160 S 0.7 6.0 0 .
Χρησιμοποιώντας μπλουζα
Η εντολή θα εμφανίσει πολλαπλές διεργασίες στο τερματικό σας. Ας προσπαθήσουμε να εμφανίσουμε τη διαδικασία με ένα συγκεκριμένο όνομα. Θα χρησιμοποιήσουμε το grep
εντολή για εμφάνιση μιας διεργασίας της οποίας το όνομα ταιριάζει με τη συμβολοσειρά «mongo».
κορυφή | grep -i mongo
Σημείωση: Εδώ, χρησιμοποίησα την επιλογή -i για να κάνω την αναζήτηση χωρίς διάκριση πεζών-κεφαλαίων.
Η έξοδος αυτής της εντολής θα εμφανίσει τις διεργασίες που ταιριάζουν με το όνομα "mongo"
1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03.22 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1.0 0.1 1: 03,25 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03,27 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03,29 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03,31 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03,33 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1.0 0.1 1: 03,36 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03.38 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03.40 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1.0 0.1 1: 03,43 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1: 03.45 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1.0 0.1 1: 03,48 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,3 0,1 1: 03,49 mongod 1158 MongoDB 20 0 288564 4848 1320 S 1.0 0.1 1: 03,52 mongod 1158 MongoDB 20 0 288564 4848 1320 S 0,7 0,1 1:03,54 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1:03,57 mongod
Τώρα, θα χρησιμοποιήσουμε το pkill
εντολή για να σκοτώσει τη διαδικασία που ονομάζεται «mongo».
σκοτώστε το mongo
Αυτή η εντολή θα σκοτώσει τώρα τη διεργασία mongo. Μπορούμε να επιβεβαιώσουμε εάν η διαδικασία έχει αναγκαστεί να τερματιστεί χρησιμοποιώντας το pgrep
εντολή που εμφανίζει το pid
της διαδικασίας που εκτελείται σύμφωνα με τα κριτήρια που καθορίζονται από τον χρήστη.
gaurav@ubuntu:~$ pgrep mongo gaurav@ubuntu:~$
Αυτή η εντολή δεν θα επιστρέψει καμία τιμή. Αυτό επιβεβαιώνει ότι η διαδικασία «mongo» σκοτώνεται τώρα χρησιμοποιώντας το pkill
εντολή.
Επιλογές που χρησιμοποιούνται συχνά με pkill
εντολή
Κατά τη χρήση του pkill
εντολή θα χρειαστούμε τις αναφερόμενες επιλογές για σωστή και αβίαστη χρήση του pkill
εντολή.
Επιλογές | Περιγραφή |
-φά | αντιστοίχιση με πλήρη ορίσματα, συμπεριλαμβανομένων κενών, εισαγωγικών, ειδικών χαρακτήρων |
-u | για να ενημερώσετε τη διαδικασία pkill ώστε να ταιριάζει με τη διαδικασία που εκτελείται από τον καθορισμένο χρήστη |
-1 | επαναφορτώνει τη διαδικασία |
-9 | σκοτώνει τη διαδικασία |
-15 | ματαιώνει με χάρη μια διαδικασία |
Ας δούμε ένα ακόμη παράδειγμα pkill
εντολή χρησιμοποιώντας το -φά
επιλογή.
Υπάρχουν δύο εντολές που εκτελούνται αυτήν τη στιγμή στο τερματικό όπως φαίνεται παρακάτω.
ping bbc.com ping youtube.com
Και οι δύο διαδικασίες ξεκινούν από το ping
εντολή. Τώρα, ας υποθέσουμε ότι θέλουμε να τερματίσουμε μόνο μία διαδικασία "ping youtube.com", τότε πρέπει να χρησιμοποιήσουμε το -φά
επιλογή με το pkill
εντολή που σκοτώνει μια διεργασία με συγκεκριμένο όνομα, συμπεριλαμβανομένων των διαστημάτων και των εισαγωγικών από το όνομα της διεργασίας.
Εντολή:
gaurav@ubuntu:~$ pkill -f "ping youtube.com" gaurav@ubuntu:~$
Αποτέλεσμα:
gaurav@ubuntu:~$ ping youtube.com PING youtube.com (142.250.67.206) 56(84) byte δεδομένων. 64 byte από bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=1 ttl=117 time=30,9 ms 64 byte από bom12s08-in-f14.1e100.net.net : 76. =117 time=121 ms 64 byte από bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=206 ttl=117 time=86,5 ms 64 byte από bom12s08-in-.6.200. ): icmp_seq=207 ttl=117 time=105 ms Τερματισμός gaurav@ubuntu:~$
Εδώ, το «ping στο youtube.com
"Η διαδικασία έχει πλέον σκοτωθεί και το "ping bbc.com
" εξακολουθεί να λειτουργεί στο τερματικό.
Σε περίπτωση που, αν είχαμε χρησιμοποιήσει το pkill ping
εντολή, θα είχε σκοτώσει και τους δύο ping
διαδικασίες, κάτι που είναι ανεπιθύμητο.
Σήματα που χρησιμοποιούνται με pkill
εντολή
pkill
αναγκάζει μια διαδικασία να τερματιστεί στέλνοντας ένα συγκεκριμένο σήμα σε αυτή τη διαδικασία. Υπάρχουν τρία πιθανά σήματα τα οποία pkill
εντολή θα μπορούσε να σταλεί στη διεργασία ανάλογα με την εντολή που δίνει ο χρήστης.
Ακολουθεί η λίστα με τα διαθέσιμα σήματα.
Σήμα | Προσδιορισμός |
1 (HUP ) | φορτώνει ξανά την καθορισμένη διαδικασία |
9 (ΣΚΟΤΩΝΩ ) | σκοτώνει την καθορισμένη διαδικασία |
15 (ΟΡΟΣ ) | σταματά ή ματαιώνει απαλά την καθορισμένη διαδικασία |
Για αυτό το σεμινάριο, θα βασιστούμε σε μεγάλο βαθμό στο ΣΚΟΤΩΝΩ
σήμα. Ας δούμε μερικά παραδείγματα για να το καταλάβουμε καλύτερα.
Χρησιμοποιώντας το pgrep
εντολή για να πάρετε το pid
αντιστοίχιση με το όνομα apache.
gaurav@ubuntu:~$ pgrep apache 1218 10402 10403 gaurav@ubuntu:~$
pkill -Kill apache
Ή μπορείτε επίσης να χρησιμοποιήσετε την εντολή με αριθμούς (π.χ. 1, 9, 15)
pkill -9 απάτσι
Και οι δύο εντολές που εμφανίζονται παραπάνω θα σκοτώσουν τη διαδικασία apache. Επιβεβαίωση με το pgrep
εντολή ξανά.
gaurav@ubuntu:~$ pgrep apache gaurav@ubuntu:~$
Όπως το pgrep
εντολή δεν επιστρέφει έξοδο, αποδεικνύει ότι η διαδικασία apache έχει σκοτωθεί.
συμπέρασμα
Σε αυτό το σεμινάριο, μάθαμε για το pkill
εντολή και πώς χρησιμοποιείται για να σκοτώσει τη διαδικασία χρησιμοποιώντας απευθείας το όνομα της διεργασίας. Μάθαμε επίσης για το pgrep
εντολή που χρησιμοποιείται για την ανάκτηση του αναγνωριστικού διεργασίας της διεργασίας που εκτελείται από οποιονδήποτε συγκεκριμένο χρήστη. ο pgrep
Η εντολή μας επιτρέπει να διασταυρώνουμε εάν η διεργασία έχει ολοκληρωθεί.