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 — top
ps
pidof
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ć.
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.
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
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ącygrep
proces:
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
Ips
grep
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.
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.
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 top
I 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ć sudo
przed 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 top
ps
.
zabijanie procesu
istnieją różne polecenia, których można użyć do zabicia procesu — kill
killall
pkill
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 pgrep
pkill
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 🙂