Jak zabić proces w Linuksie?

How Kill Process Linux



Każdy system operacyjny Linux jest dostarczany z poleceniem kill. Jedynym celem tego narzędzia jest zakończenie procesu docelowego. Jest to potężne narzędzie, które sprawia, że ​​Linux jest dość wszechstronny, szczególnie w dziedzinie serwerów i przedsiębiorstw, w których poważna zmiana/aktualizacja może nastąpić bez ponownego uruchamiania całej maszyny. W tym artykule pokażę, jak zabić proces za pomocą zabić , zabić oraz zabić wszystkich .

Zabijanie procesu

Do zabicia procesu użyjemy kilku narzędzi: zabić , zabić , oraz zabić wszystkich . Wszystkie działają w zasadzie w ten sam sposób.







Te narzędzia same w sobie nie kończą procesu. Zamiast tego wysyłają wyznaczony sygnał do docelowego procesu lub grup procesów. Jeśli nie określiłeś żadnego konkretnego sygnału, SIGTERM jest wysyłany jako sygnał domyślny. Istnieje jednak szereg obsługiwanych sygnałów, na przykład SIGKILL, SIGHUP itp.



Oto podstawowa struktura poleceń dla zabić , zabić oraz zabić wszystkich .



$zabić <sygnał_lub_opcje> <PID(s)>
$ zabij<sygnał_lub_opcje> <Nazwa procesu>
$zabić wszystkich <opcja> <Nazwa procesu>

Jeśli to możliwe, zaleca się stosowanie zabić .





Zabić , zabić oraz zabić wszystkich lokalizacje

Kill jest domyślnym poleceniem kończenia procesu.



$zabić --Wsparcie

Jest uruchamiany z katalogu /usr/bin.

$który zabić

Zaletą jest to, że umożliwia również dostęp do pkill, innego polecenia podobnego do kill, które umożliwia zakończenie procesu na podstawie ich nazwy.

$zabić--Wsparcie

$któryzabić

Niektóre aplikacje uruchamiają wiele procesów tego samego pliku wykonywalnego. Jeśli chcesz zakończyć kilka procesów o tej samej nazwie, użyj narzędzia killall.

$zabić wszystkich --Wsparcie

$który zabić wszystkich

Lista wszystkich uruchomionych procesów

Pierwszym zadaniem jest zidentyfikowanie PID (numeru identyfikacyjnego procesu) i/lub nazwy procesu, który chcesz zakończyć. W tym przykładzie użyję Firefoksa jako procesu docelowego do zakończenia. Uruchom następujące polecenie, aby wyświetlić listę wszystkich uruchomionych procesów w systemie.

$ps -DO

W przypadku większości zadań musimy znać PID procesu docelowego. Jednak w niektórych sytuacjach bardziej odpowiednie jest użycie nazwy procesu.

Jeśli znasz dokładną nazwę procesu docelowego, możesz bezpośrednio uzyskać PID za pomocą pidof .

$pidof <Nazwa procesu>

Innym interesującym narzędziem do pobierania informacji o docelowym procesie jest pgrep. Został specjalnie zaprojektowany do tego celu.

$pgrep<opcja> <Nazwa procesu>

Zabij sygnały

Przyjrzyjmy się teraz sygnałom, które obsługują narzędzia do zabijania. To ogromna lista. Oczywiście nie wszystkie z nich są niezbędne w każdej sytuacji. W rzeczywistości większość sytuacji wymaga tylko kilku sygnałów.

Najpierw spójrzmy na listę, która obsługuje kill.

$zabić -ten

Istnieją 2 sposoby określenia, jaki sygnał chcesz wysłać. Możesz użyć pełnej nazwy sygnału lub jej równoważnej wartości.

$zabić-<sygnał> <PID>

Lub,

$zabić-<wartość_sygnału> <PID>

Najpopularniejsze sygnały to SIGHUP (1), SIGKILL (9) i SIGTERM (15). Ogólnie rzecz biorąc, SIGTERM jest domyślnym i najbezpieczniejszym sposobem zakończenia procesu docelowego.

W przypadku pkill obsługiwany sygnał jest taki sam jak kill. Jednak w przypadku killall liczba obsługiwanych sygnałów i nazwy sygnałów są inne.

$zabić wszystkich -ten

Zabijanie procesu

Aby zabić proces, potrzebujemy PID tego procesu docelowego. Zakładając, że masz PID, uruchom następujące polecenie, aby go zabić.

$zabić <opcja> <PID>

Tutaj kill wyśle ​​domyślny sygnał SIGTERM do PIDów. Jeśli chcesz zakończyć wiele procesów, podaj wszystkie identyfikatory PID oddzielone spacją.

$zabić <opcja> <PID_1> <PID_2>

Określmy, jaki sygnał chcesz wysłać do celu.

Chcesz zakończyć proces używając tylko jego nazwy? Użyj pkill.

$zabić<opcja> <Nazwa procesu>

W niektórych przypadkach dana aplikacja może mieć uruchomionych zbyt wiele procesów. Wpisywanie tych wszystkich PID-ów jest czasochłonne i męczące. W takich scenariuszach będziemy używać narzędzia killall. Jest dość podobny do kill, ale działa z nazwą procesu.

$zabić wszystkich <opcja> <Nazwa procesu>

Na przykład podczas uruchamiania Firefoksa uruchamia kilka procesów. Aby zabić ich wszystkich naraz, uruchom to polecenie.

$zabić wszystkichfirefox

Chcesz zakończyć wszystkie procesy uruchomione pod określonym użytkownikiem? Killall może wykonać tę pracę, nie ma problemu. Zachowaj ostrożność podczas uruchamiania tego, ponieważ może to zepsuć system i stworzyć inne problemy. Nie zadziała, jeśli próbujesz zakończyć procesy uruchomione przez innego użytkownika z wyższymi uprawnieniami.

$zabić wszystkich -u <użytkownik>

Konflikt uprawnień

Nieodłączne cechy hierarchii użytkowników Linuksa mają również zastosowanie, gdy masz zamiar zamknąć aplikację. Użytkownik nie może zakończyć procesów, które działają z wyższymi uprawnieniami, tylko procesy z równymi/niższymi uprawnieniami. Co więcej, użytkownik nie może manipulować procesami działającymi pod innym użytkownikiem.

Rozważmy na przykład polecenie tak. Jeśli zostanie wywołany jako bieżący użytkownik, można go łatwo zakończyć za pomocą kill.

$zabić tak

A co jeśli tak biegł pod źródło ? Wywołanie kill jako bieżący użytkownik nie zadziała.

Podobnie, jeśli proces był uruchomiony przez innego użytkownika, nie można go zakończyć z innego konta użytkownika.

Końcowe przemyślenia

W tym artykule przedstawiono tylko podstawy i powszechne zastosowanie tych poleceń. Te narzędzia do zabijania są zdolne do czegoś więcej. Aby mieć dogłębną wiedzę na temat możliwości dowolnego narzędzia, polecam zajrzeć na stronę podręcznika.

$facet zabić

$facetzabić

Cieszyć się!