Πώς να σκοτώσετε διεργασίες από το τερματικό Linux

Το να σκοτώσεις μια διαδικασία είναι μερικές φορές ο μόνος τρόπος για να απαλλαγείς από αυτήν. Παρά το σκληρό όνομα, το «σκότωμα» μιας διαδικασίας σημαίνει απλώς «να την αναγκάζεις να σταματήσει». Δείτε πώς μπορείτε να το κάνετε από τη γραμμή εντολών Linux ή macOS.

Τι είναι μια Διαδικασία;

Τα προγράμματα που εκτελούνται όπως το πρόγραμμα περιήγησής σας, οι διεργασίες παρασκηνίου που σχετίζονται με το περιβάλλον της επιφάνειας εργασίας σας και οι υπηρεσίες συστήματος Linux είναι όλες διαδικασίες.

Μπορείτε να ομαδοποιήσετε τις διαδικασίες σε δύο ομάδες:

Οι διεργασίες προσκηνίου είναι αυτές που έχουν ξεκινήσει ή εκκινηθεί από έναν χρήστη. Μπορεί να βρίσκονται σε ένα παράθυρο τερματικού ή μπορεί να είναι μια γραφική εφαρμογή.
Οι διεργασίες παρασκηνίου είναι όλες οι διεργασίες που ξεκινούν αυτόματα και δεν έχουν καμία αλληλεπίδραση με τους χρήστες. Δεν περιμένουν πληροφορίες από τους χρήστες ούτε τους παρουσιάζουν αποτελέσματα ή αποτελέσματα. Οι διαδικασίες παρασκηνίου είναι πράγματα όπως υπηρεσίες και δαίμονες.

Εάν οι διαδικασίες στο προσκήνιο είναι το μπροστινό μέρος του προσωπικού του θεάτρου και των ηθοποιών, οι διαδικασίες του παρασκηνίου είναι η παρασκηνιακή ομάδα «πίσω από τις σκηνές».

Όταν οι διεργασίες παρουσιάζουν κακή συμπεριφορά ή δυσλειτουργία, μπορεί να καθυστερήσουν υπερβολικά πολύ χρόνο CPU, να καταναλώσουν τη μνήμη RAM σας ή να εισέλθουν σε έναν στενό υπολογιστικό βρόχο και να μην ανταποκρίνονται. Οι γραφικές εφαρμογές μπορούν να αρνηθούν να ανταποκριθούν στα κλικ του ποντικιού. Οι εφαρμογές τερματικού ενδέχεται να μην σας επιστρέψουν ποτέ στη γραμμή εντολών.

Η ανθρώπινη απάντηση

Το να «σκοτώσεις» μια διαδικασία σημαίνει απλώς «να αναγκάσεις τη διαδικασία να σταματήσει». Αυτό μπορεί να είναι απαραίτητο εάν η διαδικασία αρνείται να απαντήσει.

Το Linux παρέχει τις εντολές kill, pkill και killall για να σας επιτρέψει να κάνετε ακριβώς αυτό. Αυτές οι εντολές μπορούν να χρησιμοποιηθούν με οποιοδήποτε τύπο διεργασίας, γραφικό ή γραμμή εντολών, προσκήνιο ή φόντο.

  Πώς να δημιουργήσετε αντίγραφα ασφαλείας των ρυθμίσεων επιφάνειας εργασίας XFCE4 σε Linux

Η εντολή kill

Για να χρησιμοποιήσετε το kill, πρέπει να γνωρίζετε το αναγνωριστικό διεργασίας (PID) της διαδικασίας που θέλετε να τερματίσετε. Η εντολή ps μπορεί να χρησιμοποιηθεί για την εύρεση του PID μιας διεργασίας.

Για να έχετε ps αναζήτηση σε όλες τις διεργασίες χρησιμοποιήστε την επιλογή -e (όλες οι διεργασίες). Συνιστάται η διοχέτευση της εξόδου μέσω λιγότερων σωληνώσεων, θα είναι αρκετά. Πληκτρολογήστε ps, a space, -e, a space, | (ένας χαρακτήρας σωλήνα), άλλο διάστημα και μετά πληκτρολογήστε λιγότερο. Πατήστε Enter για να εκτελέσετε την εντολή.

ps -e | less

Αυτό θα σας δώσει μια λίστα διεργασιών που μοιάζει με το παρακάτω στιγμιότυπο οθόνης. Μπορείτε να κάνετε αναζήτηση προς τα εμπρός σε λιγότερα χρησιμοποιώντας το πλήκτρο / και μπορείτε να κάνετε αναζήτηση προς τα πίσω χρησιμοποιώντας το ? κλειδί.

Για να εισαγάγετε τη διαδικασία που σας ενδιαφέρει, διοχετεύστε την έξοδο από το ps έως το grep και καθορίστε το όνομα —ή μέρος του ονόματος— της διαδικασίας.

ps -e | grep shutter

Αφού εντοπίσετε το PID της διαδικασίας που θέλετε να τερματίσετε, περάστε το στην εντολή kill ως παράμετρο. Για να τερματίσετε τη διαδικασία κλείστρου που προσδιορίστηκε από την προηγούμενη εντολή, χρησιμοποιήστε αυτήν την εντολή:

kill 2099

Η εντολή kill είναι ένας σιωπηλός δολοφόνος — δεν σας δίνει καμία ανατροφοδότηση εάν ήταν επιτυχής.

Η εντολή pkill

Η εντολή pkill σάς επιτρέπει να σκοτώσετε μια διεργασία —ή διεργασίες— με το όνομα. Δεν χρειάζεται να προσδιορίσετε τη διαδικασία με PID. Για να χρησιμοποιήσετε το pkill παρέχετε έναν όρο αναζήτησης που χρησιμοποιεί το pkill για να ελέγξει τη λίστα των διεργασιών που εκτελούνται. Οι διαδικασίες αντιστοίχισης τερματίζονται. Επομένως, πρέπει να είστε βέβαιοι ότι έχετε γράψει σωστά αυτόν τον όρο αναζήτησης.

Ως δίχτυ ασφαλείας, μπορείτε να χρησιμοποιήσετε την εντολή pgrep πριν χρησιμοποιήσετε την εντολή pkill. Η εντολή pgrep δέχεται επίσης έναν όρο αναζήτησης. Θα αναφέρει το PID κάθε διαδικασίας που ταιριάζει με τον όρο αναζήτησης. Αυτό είναι ασφαλές γιατί το pgrep δεν θα εκδώσει κανένα σήμα kill στις διεργασίες και αν πληκτρολογήσετε λάθος τον όρο αναζήτησης δεν θα σκοτώσετε άλλη διεργασία κατά λάθος. Μπορείτε να βεβαιωθείτε ότι έχετε σκεφτεί σωστά τον όρο αναζήτησης προτού τον περάσετε στο pkill. Τόσο το pkill όσο και το pgrep αντιμετωπίζουν τον όρο αναζήτησης με τον ίδιο τρόπο. Η αντιμετώπισή τους είναι τόσο παρόμοια που κοινοποιήστε την ίδια σελίδα ανθρώπου.

  Πώς να δημιουργήσετε, να προσαρτήσετε και να εγγράψετε ένα αρχείο ISO στο Linux

Ας υποθέσουμε ότι υπάρχει μια διαδικασία με “subq” στο όνομά της. Θα χρησιμοποιήσουμε το ps -u dave | εντολή grep για να ρίξετε μια ματιά πίσω από την κουρτίνα. Μπορείτε να δείτε ότι το “subq” θα ταιριάζει με αυτήν τη διαδικασία και μόνο με αυτήν τη διαδικασία. Αυτό ήταν μόνο για να μπορείτε να δείτε το πλήρες όνομα της διαδικασίας.

ps -u dave | grep subq

Ας υποθέσουμε ότι ο χρήστης μας δεν το έχει κάνει αυτό. το μόνο που γνωρίζουν είναι ότι το όνομα της διαδικασίας περιέχει την υποσυμβολοσειρά “subq”. Χρησιμοποιούν το pgrep για να ελέγξουν ότι υπάρχει μόνο μία αντιστοίχιση με τον όρο αναζήτησης. Στη συνέχεια χρησιμοποιούν αυτόν τον όρο αναζήτησης με το pkill.

pgrep subq
pkill subq

Μπορείτε να χρησιμοποιήσετε το pkill για να σκοτώσετε πολλές διεργασίες ταυτόχρονα. Εδώ ο χρήστης εκτελεί το pgrep για να ελέγξει πόσες διεργασίες έχει ξεκινήσει το Chrome. Χρησιμοποιούν pkill για να τους σκοτώσουν όλους. Στη συνέχεια ελέγχουν με το pgrep ότι έχουν αφαιρεθεί όλα.

pgrep chrome
pkill chrome
pgrep chrome

Εάν εκτελούνται πολλές διεργασίες με το ίδιο όνομα, αλλά δεν θέλετε να τις σκοτώσετε όλες, μπορείτε να χρησιμοποιήσετε το pgrep με την επιλογή -f (γραμμή εντολών) για να προσδιορίσετε ποια διεργασία είναι ποια. Ένα απλό παράδειγμα θα ήταν δύο διεργασίες ping. Θέλεις να σκοτώσεις τον έναν αλλά όχι τον άλλο. Μπορείτε να χρησιμοποιήσετε τις γραμμές εντολών τους για να διακρίνετε μεταξύ τους. Σημειώστε τη χρήση εισαγωγικών για την αναδίπλωση της παραμέτρου της γραμμής εντολών.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

Η εντολή killall

Προειδοποίηση: Στα λειτουργικά συστήματα Solaris και OpenIndiana η εντολή killall θα σκοτώσει όλες τις διεργασίες που σας ανήκουν. Εάν είναι root ή εάν έχετε εκδώσει sudo killall, θα κάνετε επανεκκίνηση του υπολογιστή σας! Κατά τη διάρκεια της έρευνας για αυτό το άρθρο, αυτή η συμπεριφορά επιβεβαιώθηκε με την πιο πρόσφατη έκδοση του OpenIndiana Hipster 2018.10.

  Πώς να ρυθμίσετε το Rsync σε Linux

Η εντολή killall λειτουργεί με παρόμοιο τρόπο στην εντολή pkill αλλά με συγκεκριμένη διαφορά. Αντί να μεταβιβάσετε έναν όρο αναζήτησης στην εντολή, πρέπει να δώσετε το ακριβές όνομα της διαδικασίας.

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

killall shutt
killall shutter

Η επιλογή -y (νεότερο από) σάς επιτρέπει να σκοτώσετε διεργασίες που εκτελούνται για λιγότερο από μια καθορισμένη περίοδο. Η περίοδος δίνεται σε αριθμούς ακολουθούμενο από μία από αυτές τις μονάδες:

s (δευτερόλεπτα)
m (λεπτά)
h (ώρες)
δ (ημέρες)
w (εβδομάδες)
M (μήνες, σημείωση, κεφαλαίο “M”)
y (έτη)

Για να σκοτώσετε μια διεργασία που ονομάζεται ana που μόλις ξεκίνησε και να αφήσετε οποιαδήποτε παλαιότερη εμφάνιση του ana να εκτελείται, θα μπορούσατε να χρησιμοποιήσετε τις ακόλουθες παραμέτρους με το killall, εάν είχατε αντιδράσει μέσα σε δύο λεπτά:

killall -y 2m ana

Η επιλογή -o (παλαιότερο από) σάς επιτρέπει να σκοτώσετε διεργασίες που εκτελούνται για περισσότερο από μια καθορισμένη περίοδο. Αυτή η εντολή θα σκοτώσει όλες τις συνδέσεις ssh που εκτελούνται για περισσότερο από μία ημέρα:

killall -o 1d sshd

Μην είστε πολύ Trigger Happy

Αυτές οι εντολές θα σας επιτρέψουν να αναγνωρίσετε και να τερματίσετε τις εσφαλμένες διαδικασίες με ακρίβεια και ασφάλεια σωστά.

Να είστε πάντα προσεκτικοί. Πρώτα, βεβαιωθείτε ότι η διαδικασία που πρόκειται να σκοτώσετε είναι πραγματικά αυτή που θέλετε. Δεύτερον, διπλός έλεγχος—να είστε προσεκτικοί και βεβαιωθείτε ότι η στοχευμένη διαδικασία είναι αυτή που θέλετε να τερματίσετε. Συνεχίστε με τον τερματισμό της διαδικασίας μόλις είστε ικανοποιημένοι.