Jak zabić proces lub zatrzymać program w Linuksie

Gdy proces źle się zachowuje, możesz czasem chcieć go zakończyć lub zabić. W tym poście poznamy kilka sposobów na zakończenie procesu lub aplikacji z wiersza poleceń, jak również z interfejsu graficznego, używając gedit jako przykładowej aplikacji.

Używanie wiersza poleceń/znaków zakończenia

Ctrl + C

Jednym z problemów wywołania gedit z wiersza poleceń (jeśli nie używasz gedit &) jest to, że nie zwolni ono znaku zachęty, więc sesja powłoki zostanie zablokowana. W takich przypadkach z pomocą przychodzi Ctrl+C (klawisz Control w połączeniu z 'C’). Zakończy to gedit i cała praca zostanie utracona (chyba że plik został zapisany). Ctrl+C wysyła sygnał SIGINT do gedit. Jest to sygnał zatrzymania, którego domyślnym działaniem jest zakończenie procesu. Instruuje on powłokę, by zatrzymała gedit i powróciła do pętli głównej, a Ty odzyskasz znak zachęty.

$ gedit
^C

Ctrl + Z

Nazywa się to znakiem zawieszenia. Wysyła on do procesu sygnał SIGTSTP. Jest to również sygnał zatrzymania, ale domyślnym działaniem nie jest zabicie, lecz zawieszenie procesu.

Zatrzyma (zabije/kończy) gedit i zwróci znak zachęty powłoki.

$ gedit
^Z
+ Stopped gedit
$

Po zawieszeniu procesu (w tym przypadku gedit), nie jest możliwe pisanie ani robienie czegokolwiek w gedit. W tle, proces staje się zadaniem. Można to sprawdzić za pomocą polecenia jobs.

$ jobs
+ Stopped gedit

jobs pozwala kontrolować wiele procesów w ramach jednej sesji powłoki. Można zatrzymywać, wznawiać i przenosić zadania do tła lub na pierwszy plan w zależności od potrzeb.

Wznówmy gedit w tle i zwolnijmy znak zachęty do uruchamiania innych poleceń. Można to zrobić za pomocą polecenia bg, a następnie identyfikatora zadania (zauważ na wyjściu jobs powyżej. jest identyfikatorem zadania).

$ bg 1
+ gedit &

Jest to podobne do uruchomienia gedit za pomocą &,:

 $ gedit &

Użycie kill

kill pozwala na precyzyjną kontrolę nad sygnałami, umożliwiając sygnalizowanie procesu przez podanie nazwy sygnału lub numeru sygnału, a następnie identyfikatora procesu, czyli PID.

To, co lubię w kill, to fakt, że może również pracować z identyfikatorami zadań. Uruchommy gedit w tle, używając gedit &. Zakładając, że mam identyfikator zadania gedit z polecenia jobs, wyślijmy SIGINT do gedit:

 $ kill -s SIGINT %1

Zauważ, że identyfikator zadania powinien być poprzedzony %, w przeciwnym razie kill uzna go za PID.

kill może działać bez jawnego określania sygnału. W takim przypadku, domyślnym działaniem jest wysłanie SIGTERM, co spowoduje zakończenie procesu. Wykonaj kill -l, aby wyświetlić listę wszystkich nazw sygnałów, i użyj polecenia man kill, aby przeczytać stronę man.

Używanie killall

Jeśli nie chcesz określać identyfikatora zadania lub PID, killall pozwala określić proces po nazwie. Najprostszym sposobem zakończenia gedit przy użyciu killall jest:

 $ killall gedit

To zabije wszystkie procesy o nazwie gedit. Podobnie jak kill, domyślnym sygnałem jest SIGTERM. Ma opcję ignorowania przypadku przy użyciu -I:

$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit

Aby dowiedzieć się więcej o różnych flagach dostarczanych przez killall (takich jak -u, która pozwala zabijać procesy należące do użytkownika) sprawdź stronę man (man killall)

Używanie xkill

Czy kiedykolwiek napotkałeś problem, w którym odtwarzacz multimedialny, taki jak VLC, wyszarzał się lub zawiesił? Teraz możesz znaleźć PID i zabić aplikację za pomocą jednego z poleceń wymienionych powyżej lub użyć xkill.

xkill pozwala na zabicie okna za pomocą myszy. Po prostu wykonaj xkill w terminalu, co powinno zmienić kursor myszy na x lub malutką ikonkę czaszki. Kliknij x na oknie, które chcesz zamknąć. Bądź ostrożny używając xkill, chociaż – jak wyjaśnia jego strona man – może to być niebezpieczne. You have been warned!

Refer to the man page of each command for more information. Możesz również poznać polecenia takie jak pkill i pgrep.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.