Android

Πώς να σκοτώσει μια διαδικασία στο linux

Harvard CS50 lecture 2

Harvard CS50 lecture 2

Πίνακας περιεχομένων:

Anonim

Έχετε αντιμετωπίσει ποτέ την κατάσταση κατά την οποία ξεκινήσατε μια εφαρμογή και ξαφνικά ενώ χρησιμοποιείτε την εφαρμογή, δεν ανταποκρίνεται και απροσδόκητα καταρρέει; Προσπαθείτε να ξεκινήσετε πάλι την εφαρμογή, αλλά τίποτα δεν συμβαίνει επειδή η αρχική διαδικασία εφαρμογής ποτέ δεν κλείνει πραγματικά πλήρως.

Λοιπόν, έχει συμβεί σε όλους μας σε κάποιο σημείο, έτσι δεν είναι; Η λύση είναι να τερματίσει ή να σκοτώσει τη διαδικασία εφαρμογής. Αλλά πως?

Ευτυχώς, υπάρχουν διάφορα προγράμματα κοινής ωφέλειας στο Linux που σας επιτρέπουν να σκοτώσετε παραπλανητικές διαδικασίες., θα σας δείξουμε πώς να χρησιμοποιήσετε εντολές kill , killall και pkill για να τερματίσετε μια διαδικασία στο Linux.

Η κύρια διαφορά μεταξύ αυτών των εργαλείων είναι ότι ο kill τερματίζει τις διαδικασίες βάσει του αναγνωριστικού διαδικασίας (PID), ενώ οι εντολές killall και pkill τερματίζουν τις διαδικασίες που εκτελούνται με βάση τα ονόματα και τα άλλα χαρακτηριστικά τους.

Οι τακτικοί χρήστες μπορούν να σκοτώσουν τις δικές τους διαδικασίες, αλλά όχι εκείνοι που ανήκουν σε άλλους χρήστες, ενώ ο χρήστης ρίζας μπορεί να σκοτώσει όλες τις διαδικασίες.

Το σύστημα σκοτώνει τα σήματα

kill , killall και pkill στείλουν ένα δεδομένο σήμα σε συγκεκριμένες διαδικασίες ή ομάδες επεξεργασίας. Όταν δεν έχει οριστεί σήμα, κάθε εργαλείο στέλνει 15 ( TERM ).

Τα πιο συχνά χρησιμοποιούμενα σήματα είναι:

  • 1 (-HUP): για να φορτώσετε ξανά μια διαδικασία. 9 (-KILL): να σκοτώσει μια διαδικασία. 15 (-TERM): να σταματήσετε με χάρη μια διαδικασία.

Τα σήματα μπορούν να καθοριστούν με τρεις διαφορετικούς τρόπους:

  • χρησιμοποιώντας αριθμό (π.χ. -1) με το πρόθεμα "SIG" (π.χ., -SIGHUP) χωρίς το πρόθεμα "SIG" (π.χ., -HUP).

Χρησιμοποιήστε την επιλογή -l για να εμφανίσετε όλα τα διαθέσιμα σήματα:

kill -l # or killall -l

Τα βήματα που περιγράφονται παρακάτω θα λειτουργούν σε όλες τις διανομές του Linux.

Διαδικασίες τερματισμού Χρήση της εντολής kill

Για να τερματίσετε μια διαδικασία με την εντολή kill , πρώτα πρέπει να βρείτε το PID της διαδικασίας. Μπορείτε να το κάνετε χρησιμοποιώντας διαφορετικές εντολές όπως top , ps , pidof και pgrep .

Ας υποθέσουμε ότι το πρόγραμμα περιήγησης Firefox δεν ανταποκρίνεται και θα πρέπει να σκοτώσετε τη διαδικασία Firefox. Για να βρείτε το αναγνωριστικό διαδικασίας, χρησιμοποιήστε την εντολή pidof :

pidof firefox

Η εντολή θα εκτυπώσει όλες τις διαδικασίες του Firefox:

2551 2514 1963 1856 1771

Αφού γνωρίσετε τις διαδικασίες PID του Firefox για να τερματίσει όλα αυτά στέλνουν το σήμα TERM :

kill -9 2551 2514 1963 1856 1771

Διαδικασίες τερματισμού Χρήση της εντολής killall

Η εντολή killall τερματίζει όλα τα προγράμματα που ταιριάζουν με ένα καθορισμένο όνομα.

Χρησιμοποιώντας το ίδιο σενάριο όπως στο παρελθόν, μπορείτε να καταστρέψετε τη διαδικασία του Firefox πληκτρολογώντας:

killall -9 firefox

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

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

sudo killall -u sara

Διαδικασίες τερματισμού Χρήση της εντολής pkill

pkill τερματίζει διαδικασίες που ταιριάζουν με το πρότυπο που δίνεται στη γραμμή εντολών:

pkill -9 firefox

Το όνομα της διαδικασίας δεν χρειάζεται να είναι ακριβής.

Με το pkill μπορείτε επίσης να στείλετε ένα μήνυμα σε διαδικασίες που ανήκουν σε ένα συγκεκριμένο χρήστη. Για να σκοτώσετε μόνο τις διαδικασίες firefox που ανήκουν στον χρήστη "sara", πληκτρολογήστε:

pkill -9 -u sara firefox

συμπέρασμα

Ο τερματισμός των προγραμμάτων που δεν ανταποκρίνονται χρησιμοποιώντας εντολές kill , killall και pkill είναι μια εύκολη εργασία. Χρειάζεται μόνο να γνωρίζετε το όνομα της διαδικασίας ή το PID.

τερματικό θανάτου