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
.
.