chcesz dowiedzieć się więcej o administracji Linuksem? Poznaj te kursy szkoleniowe dla Linuksa.
- Wprowadzenie do Linuksa (LFS101x) – darmowe
- podstawowe elementy administracji systemem Linux (LFS201)
Dowiedz się, jak zabić błędne procesy w tym samouczku z naszych archiwów.
wyobraź sobie: uruchomiłeś aplikację (czy to z ulubionego menu pulpitu, czy z wiersza poleceń) i zaczynasz używać tej uruchomionej aplikacji, tylko po to, aby ją zablokować, przestać działać lub niespodziewanie umrzeć. Próbujesz uruchomić aplikację ponownie, ale okazuje się, że oryginał nigdy nie został całkowicie zamknięty.
czym się zajmujesz? Zabijasz proces. Ale jak? Wierz lub nie, Twój najlepszy zakład najczęściej leży w wierszu poleceń. Na szczęście Linux ma wszelkie narzędzia niezbędne do umożliwienia Tobie, użytkownikowi, zabicia błędnego procesu. Jednak przed natychmiastowym uruchomieniem tego polecenia, aby zabić proces, najpierw musisz wiedzieć, co to jest proces. Jak zająć się tym warstwowym zadaniem? To całkiem proste … gdy poznasz narzędzia do twojej dyspozycji.
pozwól, że przedstawię ci wspomniane narzędzia.
kroki, które zamierzam nakreślić, będą działać na prawie każdej dystrybucji Linuksa, niezależnie od tego, czy jest to pulpit, czy serwer. Będę miał do czynienia wyłącznie z wierszem poleceń, więc otwórz swój terminal i przygotuj się do pisania.
zlokalizowanie procesu
pierwszym krokiem w uśmierceniu nie reagującego procesu jest zlokalizowanie go. Istnieją dwie komendy, których używam do zlokalizowania procesu: top i ps. Top to narzędzie, które każdy administrator powinien poznać. Z góry, można uzyskać pełną listę aktualnie uruchomiony proces. Z wiersza poleceń, wydaj top, aby zobaczyć listę uruchomionych procesów (Rysunek 1).
z tej listy zobaczysz kilka dość ważnych informacji. Na przykład Chrome przestał reagować. Zgodnie z naszym górnym wyświetlaczem, możemy zauważyć, że istnieją cztery instancje chrome działające z identyfikatorami procesów (PID) 3827, 3919, 10764 i 11679. Informacje te będą ważne, aby mieć jedną szczególną metodę zabijania procesu.
chociaż top jest niezwykle poręczny, nie zawsze jest to najbardziej skuteczny sposób na uzyskanie potrzebnych informacji. Powiedzmy, że wiesz, że proces Chrome jest tym, czego potrzebujesz, aby zabić, i nie chcesz przeglądać informacji w czasie rzeczywistym oferowanych przez top. W tym celu możesz użyć polecenia ps i przefiltrować wyjście przez grep. Polecenie ps zgłasza migawkę bieżącego procesu, a grep drukuje linie pasujące do wzorca. Powód, dla którego filtrujemy ps przez grep jest prosty: Jeśli wydasz polecenie ps samodzielnie, otrzymasz listę migawek wszystkich bieżących procesów. Chcemy tylko, aby oferta była powiązana z Chrome. Polecenie to wygląda tak:
ps aux | grep chrome
opcje aux są następujące:
-
a = Pokaż procesy dla wszystkich użytkowników
-
u = wyświetl użytkownika/właściciela procesu
-
x = również Pokaż procesy nie podłączone do terminala
opcja X jest ważna, gdy poszukujesz informacji dotyczących aplikacji graficznej.
kiedy wydajesz powyższe polecenie, otrzymasz więcej informacji niż potrzebujesz (Rysunek 2) do zabicia procesu, ale czasami jest to bardziej wydajne niż użycie top.
zabijanie procesu
teraz dochodzimy do zadania zabijania procesu. Mamy dwie informacje, które pomogą nam zabić błędny proces:
-
Nazwa procesu
-
Identyfikator procesu
, którego użyjesz, określi polecenie używane do zakończenia procesu. Istnieją dwie komendy używane do zabicia procesu:
-
kill – zabija proces o ID
-
killall – zabija proces o nazwie
istnieją również różne sygnały, które mogą być wysyłane do obu komend kill. Jaki sygnał wyślesz, będzie zależeć od tego, jakie wyniki chcesz uzyskać z polecenia kill. Na przykład, możesz wysłać sygnał HUP (hang up) do polecenia kill, które skutecznie zrestartuje proces. Jest to zawsze mądry wybór, gdy potrzebujesz natychmiastowego restartu procesu (na przykład w przypadku demona). Możesz uzyskać listę wszystkich sygnałów, które mogą być wysłane do polecenia kill, wydając kill-l. znajdziesz dość dużą liczbę sygnałów (Rysunek 3).
najczęstsze sygnały kill to:
Signal Name |
Single Value |
Effect |
SIGHUP |
Hangup |
|
SIGINT |
Interrupt from keyboard |
|
SIGKILL |
Kill signal |
|
SIGTERM |
Termination signal |
|
SIGSTOP |
17, 19, 23 |
Stop the process |
co jest miłe w tym, że możesz użyć wartości sygnału zamiast nazwy sygnału. Nie musicie więc zapamiętywać wszystkich nazw różnych sygnałów.
użyjmy teraz polecenia kill, aby zabić naszą instancję chrome. Struktura dla tego polecenia byłaby następująca:
kill SIGNAL PID
gdzie sygnał jest sygnałem do wysłania, a PID jest ID procesu do zabicia. Z polecenia ps wiemy już, że identyfikatory, które chcemy zabić to 3827, 3919, 10764 i 11679. Aby wysłać sygnał zabijania, wydaliśmy komendy:
kill -9 3827kill -9 3919kill -9 10764kill -9 11679
Po wydaniu powyższych poleceń wszystkie procesy chrome zostaną pomyślnie zakończone.
pójdźmy łatwą drogą! Jeśli wiemy już, że proces, który chcemy zabić, nazywa się chrome, możemy użyć polecenia killall i wysłać ten sam sygnał procesowi w ten sposób:
killall -9 chrome
jedynym zastrzeżeniem do powyższego polecenia jest to, że może nie przechwycić wszystkich uruchomionych procesów chrome. Jeśli po uruchomieniu powyższego polecenia wydasz polecenie ps aux / grep chrome i zobaczysz Pozostałe uruchomione procesy, najlepszym rozwiązaniem jest powrót do polecenia kill i wysłanie sygnału 9, aby zakończyć proces za pomocą PID.
łatwe kończenie procesów
jak widać, zabijanie błędnych procesów nie jest tak trudne, jak mogłoby się wydawać. Kiedy kończę z upartym procesem, zwykle zaczynam od polecenia killall, ponieważ jest to najbardziej efektywna droga do zakończenia. Jednak, gdy skończysz z naprawdę zadziornym procesem, polecenie kill jest drogą do zrobienia.
Dowiedz się więcej o Linuksie poprzez bezpłatny kurs „Wprowadzenie do Linuksa” od Linux Foundation i edX.