Boolean World

linux kill cover image

w systemie operacyjnym istnieje wiele programów, które mogą być uruchamiane przez użytkownika lub przez sam system operacyjny (np. usługi systemowe). Takie programy uruchomione w systemie nazywane są”procesami”. Zwykle proces kończy się samodzielnie, gdy kończy swoje zadanie lub gdy poprosisz go o zakończenie, naciskając skrót klawiaturowy lub klikając przycisk „Zamknij”.

jednak czasami proces może się zawiesić lub pochłonąć dużo procesora lub pamięci RAM. W tej sytuacji, chcesz ręcznie „zabić” proces. W tym artykule przyjrzymy się różnym narzędziom, których można użyć do zabijania procesów w systemie Linux.

lokalizowanie procesu w celu zabicia

aby zabić proces, należy najpierw zlokalizować szczegóły procesu. Można to zrobić za pomocą trzech komend — toppspidof I pgrep. W zależności od sytuacji, możesz użyć jednego z tych poleceń do tego celu.

jak zobaczymy w dalszej części tego artykułu, możesz zabić proces poprzez jego nazwę lub ID procesu (PID). Pid jest liczbą, która jednoznacznie identyfikuje proces. Zabijanie za pomocą identyfikatora procesu jest użyteczne, gdy chcesz zabić tylko określony proces. Z drugiej strony, zabijanie przez nazwę procesu jest przydatne, gdy chcesz zabić wszystkie uruchomione instancje danego programu.

lokalizując proces za pomocą polecenia top

najpierw przyjrzymy się poleceniutop. Uruchom polecenie top wpisując:

top

otrzymasz interaktywny interfejs, jak pokazano poniżej. Możesz przeglądać tę listę, aby znaleźć nazwę lub PID procesu, który chcesz zabić.

górne polecenie pokazujące listę procesów.

aby przeglądać tę listę, możesz użyć klawiszy GÓRA / DÓŁ. Dodatkowo, polecenie top ma również sposoby filtrowania procesów według użycia procesora, nazw użytkowników i procesów, o których możesz przeczytać w tym przewodniku.

lewa kolumna zawiera PID procesu, a prawa strona zawiera nazwę programu. Jako przykład, na powyższym zrzucie ekranu mamyvnstatd proces uruchomiony z ID procesu 263.

zlokalizowanie procesu za pomocą poleceń ps i grep

innym sposobem na uzyskanie listy procesów jest uruchomienie:

ps aux

w powyższym poleceniu użyliśmy FLAGaux, które mają następujące znaczenie:

  • a: pokazuje procesy dla wszystkich użytkowników
  • u: wyświetla użytkownika, który korzysta z procesu
  • x: pokazuje wszystkie procesy. (Bez tego, ps nie wyświetli procesów uruchomionych w środowisku GUI.)

wyjście polecenia jest podobne do wyjścia polecenia top. Pid jest dostępny w drugiej kolumnie od lewej, a nazwa procesu jest dostępna w prawej kolumnie.

wyniki polecenia "ps aux"."ps aux" command.

zaletą użyciaps jest to, że można łatwo filtrować tę listę za pomocą poleceniagrep. Na przykład, aby znaleźć proces związany z terminem „vnstat”, możesz użyć:

ps aux | grep -i vnstat

filtrowanie procesów za pomocą ps i grep, z wynikiem pozytywnym.

tutaj mamy dwa wyniki — procesvnstatd oraz procesgrep. Ponieważ szukaliśmy wszystkich instancji terminu „vnStat”, a także uruchamialiśmy grep z” vnstat”jako argumentem, otrzymaliśmy grep w wynikach.

Tak więc, nawet jeśli nie ma uruchomionych procesów powiązanych z „vnstat”, otrzymamy jeden wpis pokazującygrepproces:

filtrowanie procesów za pomocą ps i grep.

tak więc, mimo że otrzymaliśmy wynik, nie ma procesów, które by nas interesowały.

znalezienie PID z pidof i pgrep

kombinacjatop Ipsgrep pozwala nam wyszukiwać procesy. Z drugiej strony, jeśli znasz dokładną nazwę procesu, możesz użyć pidof, aby znaleźć jego PID.

używanie pidof jest dość proste. Aby uzyskać Pidy procesu o dokładnej nazwie „nginx”, użyj:

pidof nginx

Jeśli istnieją procesy o dokładnej nazwie „nginx”, otrzymasz listę Pidów, jak pokazano poniżej. Jeśli ich nie ma, nie otrzymasz nic jako wynik.

polecenie pidof

Jeśli nie znasz pełnej nazwy, możesz użyćpgrep zamiastpidof. Na przykład, aby wyszukać wszystkie procesy, które zawierają „ngin” gdzieś w swojej nazwie, Uruchom:

pgrep ngin

to dopasuje procesy o dokładnej nazwie „nginx”, jak również każdy inny proces, który spełnia te same kryteria. W naszym systemie zauważ, że dostajemy wszystkie Pidy, które należały do „nginx” na powyższym zrzucie ekranu.

polecenie pgrep.

poleceniapidof Ipkill dają znacznie mniej informacji. Jak zobaczymy w następnej sekcji, są pewne okoliczności, w których nie można zabić procesu. Wyjście topI ps zawiera dodatkowe informacje, które pomagają określić, czy naprawdę można zabić proces.

jakie procesy można zabić?

teraz, gdy zlokalizowaliśmy proces, nadszedł czas, aby go zabić. Zanim jednak nauczymy się, jak to zrobić, musisz wiedzieć kilka rzeczy.

Jeśli jesteś normalnym użytkownikiem, możesz zabić własne procesy, ale nie te, które należą do innych użytkowników. Zarówno top, jak ips pokazują użytkownika, pod którym uruchomiony jest proces. W przypadku top, Druga kolumna zawiera nazwę użytkownika. Z ps aux, pierwsza kolumna zawiera nazwę użytkownika.

jednak użytkownik root może zabić wszystkie procesy. Możesz dodać sudoprzed każdym poleceniem, aby uruchomić go jako root, lub uzyskać powłokę root, wpisując su, a następnie wykonać polecenie.

w Linuksie, gdy proces jest uśmiercony, do procesu dostarczany jest „sygnał kończący”. Chociaż istnieje wiele różnych rodzajów sygnałów, najczęściej mamy do czynienia z sygnałami” SIGTERM „i” SIGKILL”. Mają one wartość liczbową odpowiednio 15 i 9. Domyślnie wszystkie polecenia zabijające proces używają „SIGTERM”, co pozwala programowi na uruchomienie kodu przed jego zakończeniem, co pozwala na zakończenie”z gracją”. Jeśli chcesz zakończyć proces siłą, możesz zamiast tego użyć „SIGKILL”.

jądro Linuksa przechowuje pewne informacje związane ze stanem procesu. Kiedy proces się kończy, jądro musi przechowywać informacje wokół, tak aby proces macierzysty mógł dowiedzieć się, czy proces potomny był w stanie wykonać swoje zadania i czy zakończył się samodzielnie, czy też został zabity. Dopóki rodzic tego nie zrobi, te „zombie” procesy pojawią się na liście procesów. Nie można zabić takiego procesu, ponieważ jest to tylko wpis na liście wszystkich procesów i nie ma z nim powiązanego rzeczywistego procesu.

gdy proces wykonuje operacje wejścia/wyjścia (takie jak odczyt lub zapis na dysk), mówi się, że znajduje się w stanie „nieprzerwanego snu”. Nie można zabić procesu, gdy jest on w tym stanie.

Możesz sprawdzić, czy proces znajduje się w stanie „zombie”(z) lub „nieprzerwanego snu”(D), patrząc na 8 kolumnę wyjścia topps.

zabijanie procesu

istnieją różne polecenia, których można użyć do zabicia procesu — killkillallpkill Itop. Zaczniemy od najprostszego: poleceniakillall.

zabijanie procesów za pomocą polecenia killall

polecenie killall jest jednym z najprostszych sposobów na zabicie procesu. Jeśli znasz dokładną nazwę procesu i wiesz, że nie działa on jako inny użytkownik i nie znajduje się w Stanach Z LUB D, możesz użyć tego polecenia bezpośrednio; nie ma potrzeby, aby ręcznie zlokalizować proces, jak opisaliśmy powyżej.

domyślnie, na przykład, aby zabić proces o nazwie „firefox”, Uruchom:

killall firefox

aby wymusić zabicie procesu za pomocą SIGKILL, Uruchom:

killall -9 firefox

Możesz również użyć-SIGKILL zamiast-9.

Jeśli chcesz zabić procesy interaktywnie, możesz użyć -i w ten sposób:

killall -i firefox

Jeśli chcesz zabić proces działający jako inny użytkownik, możesz użyć sudo:

sudo killall firefox

Możesz również zabić proces, który był uruchomiony przez pewien czas za pomocą znaczników -o I -y. Tak więc, jeśli chcesz zabić proces, który działał dłużej niż 30 minut, użyj:

killall -o 30m <process-name>

Jeśli chcesz zabić proces, który działał krócej niż 30 minut, użyj:

killall -y 30m <process-name>

podobnie, użyj następujących skrótów dla odpowiednich jednostek czasu:

s seconds
m minutes
h hours
d days
w weeks
M months
y years

Killing processes with the pkill command

Sometimes, you only know part of a program’s name. Podobnie jak pgreppkill pozwala na zabijanie procesów w oparciu o częściowe dopasowania. Na przykład, jeśli chcesz zabić wszystkie procesy zawierające nazwę apache w nazwie, Uruchom:

pkill apache

Jeśli chcesz użyć SIGKILL zamiast SIGTERM, użyj:

pkill -9 apache

ponownie Możesz również użyć -SIGKILL zamiast -9.

zabijanie procesów za pomocą polecenia kill

używanie polecenia kill jest proste. Po znalezieniu PID procesu, który chcesz zabić, możesz go zakończyć za pomocą poleceniakill. Na przykład, jeśli chcesz zabić proces o PID równym 1234, użyj następującego polecenia:

kill 1234

jak wspomnieliśmy wcześniej, domyślnie jest używany SIGTERM. Aby użyć SIGKILL, użyj -9 lub -SIGKILL jak widzieliśmy wcześniej:

kill -9 1234

zabijanie procesów za pomocą polecenia top

bardzo łatwo jest zabić procesy za pomocą top polecenie. Najpierw wyszukaj proces, który chcesz zabić i zanotuj PID. Następnie naciśnij k, gdy działa top (rozróżnia się wielkość liter). Poprosi Cię o wpisanie PID procesu, który chcesz zabić.

Po wprowadzeniu PID naciśnij enter. Teraz zapyta, który sygnał chcesz użyć, aby zabić proces. Jeśli chcesz użyć SIGTERM (15), po prostu naciśnij enter, ponieważ jest to sygnał domyślny. Jeśli chcesz użyć SIGKILL(9), wpisz 9 i naciśnij enter.

Jeśli zostawisz ID procesu puste i naciśniesz enter bezpośrednio, zakończy to proces najwyższy na liście. Możesz przewijać za pomocą klawiszy strzałek i zmieniać proces, który chcesz zabić w ten sposób.

wnioski

w tym poście zobaczyliśmy różne sposoby zabijania procesów w Linuksie. Nauka tych poleceń jest niezbędna do prawidłowego administrowania i zarządzania systemem. Jeśli chcesz poznać więcej tych poleceń, zapoznaj się z ich odpowiednimi stronami podręcznika.

Jeśli podobał Ci się ten post, podziel się nim 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.