Menu
Za darmo
Rejestracja
dom  /  Instalacja i konfiguracja/ Jak zabić zawieszony proces w linux xfce. Opanowanie polecenia Kill w systemie Linux

Jak zabić zawieszony proces w linux xfce. Opanowanie polecenia Kill w systemie Linux

Sygnały to przerwania programowe. Służą do komunikacji między procesami w systemach operacyjnych UNIX i UNIX-podobnych, takich jak Linux, Mac OS.

Sygnały były używane od Bell Labs UNIX w latach 70. XX wieku i są obecnie formalnie zdefiniowane przez standard POSIX. Kiedy sygnał dociera do procesu, system operacyjny przerywa normalny przepływ wykonywania procesu i wysyła powiadomienie.

Nie ma znaczenia, jakiego systemu operacyjnego używasz, na pewno doświadczysz zablokowania aplikacji i odmowy prawidłowego działania. W systemach Unix i Linux istnieje polecenie „zabij”, którego można użyć do natychmiastowego zabicia procesu, ale nie tylko to, ale omówię to nieco później. W tym artykule „Kill command in Unix/Linux” opowiem i pokażę różne polecenia narzędzia kill na gotowych przykładach.

zabij polecenia i sygnały

Kiedy wydajesz polecenie „zabij”, w rzeczywistości wysyłasz sygnał do systemu i instruujesz go, aby zakończył działanie nieprawidłowej aplikacji robota. Istnieje w sumie 60 sygnałów, których można użyć, ale wszystko, co naprawdę musisz wiedzieć, to SIGTERM(15) i SIGKILL(9).

Możesz wyświetlić wszystkie sygnały za pomocą polecenia:

# zabij -l

Na moim macOS:

Postaram się omówić wszystkie sygnały, ale na samym początku porozmawiajmy tylko o najważniejszych i najczęściej używanych.

Podstawowe sygnały

Następujące sygnały są częścią standardu POSIX. Każdy sygnał jest makro zdefiniowanym w Plik nagłówkowy systemu. Zwykle są skracane bez ich przedrostka SIG; na przykład SIGHUP jest często określany po prostu jako HUP.

SIGTERM– Ten sygnał żąda zakończenia uruchomionego procesu. Ten sygnał można zignorować, a proces ma czas na dobre zamknięcie. Kiedy program dobrze się zamyka, oznacza to, że miał czas na zapisanie jego postępu i zwolnienie zasobów. Innymi słowy, nie „wymusił” zakończenia procesu.

SIGKILL Sygnał SIGKILL powoduje, że proces natychmiast przestaje wykonywać swoją pracę. Program nie może zignorować tego sygnału. Niezapisane postępy zostaną utracone.

Składnia słowa „zabij”.

Składnia polecenia to:

# zabij PID(y)

# zabij [-s] [-l] %pid

Domyślnym sygnałem (jeśli nie określono) jest SIGTERM. Kiedy ten sygnał nie pomaga i nie działa, możesz użyć następujących opcji „zabicia”, aby wymusić zakończenie procesu:

# zabij SIGKILL PID

# zabij -9 PID

gdzie „-9” to flaga sygnału SIGKILL.

Jeśli nie wiesz, którego PID aplikacji użyć do pozbycia się, uruchom polecenie:

$ ps -pomoc

A jeśli znasz konkretną aplikację (na przykład Apache), możesz usunąć niepotrzebne i wyświetlić wszystkie procesy dla tej usługi:

$ ps -aux | grep Apache

Spowoduje to wyświetlenie wszystkich uruchomionych aplikacji wraz z ich PID.

Na przykład, aby zabić aplikację, uruchamiam następujące polecenie:

# zabij -9 3629

Warto również zauważyć, że możesz uruchamiać wiele procesów jednocześnie, aby można je było „zabić”:

# zabij -9 PID1 PID2 PID 3

Załaduj ponownie pliki konfiguracyjne lub zrestartuj narzędzia:

# zabij -1 numer_PID

Szczególnie przydatne sygnały to HUP, INT, kill, STOP, CONT i 0.

Dostępne opcje to:

-s nazwa_sygnału
Symboliczna nazwa sygnału, która określa sygnał, do którego ma zostać wysłany sygnał inny niż domyślny.

-l
Jeśli operand nie jest określony, pokaż nazwy sygnałów; W przeciwnym razie wpisz nazwę sygnału odpowiadającą statusowi wyjścia.

-nazwa_sygnału
Symboliczna nazwa sygnału, która domyślnie określa sygnał do wysłania do TERM.

-numer_sygnału
Nieujemna dziesiętna liczba całkowita, która domyślnie określa sygnał do wysłania do TERM.

Szczególnie ważne są następujące PID:
-1 Jeśli jesteś superużytkownikiem, roześlij sygnał do wszystkich procesów; inaczej rozgłaszane do wszystkich procesów należących do
dla użytkownika.

Niektóre z najczęściej używanych sygnałów to:

  • 1 HUP (rozłącz się) - rozłącz się.
  • 2 INT (przerwanie) - przerwanie.
  • 3 WYJDŹ (wyjdź) - wyjdź.
  • 6 ABRT (przerwanie) - przerwania.
  • 9 ZABIJ (nie do złapania, nie do zignorowania zabójstwo)
  • 14 ALRM (budzik) - budzik.
  • 15 TERM (sygnał zakończenia programowego)

PKill

Komenda "pkill" umożliwia korzystanie z rozszerzonych wzorców wyrażeń regularnych i innych kryteriów dopasowywania. Zamiast używać PID, możesz teraz zabić aplikację, wprowadzając nazwę procesu. Na przykład, aby zabić przeglądarkę Firefox, po prostu uruchom polecenie:

#pkillFirefox

Ponieważ pasuje do wzorca wyrażenia regularnego, możesz również wprowadzić część nazwy procesu, na przykład:

#pkillfire

Aby uniknąć „zabijania” niewłaściwych procesów, możesz wykonać „pgrep -l [nazwa procesu]” na liście odpowiednich procesów.

Polecenie pkill ma o wiele więcej opcji, na przykład jeśli określisz opcję „-u”, pozwoli ci to określić nazwę użytkownika lub identyfikator. W tym przykładzie wysyłamy sygnał TERM do wszystkich procesów należących do użytkownika „nobody”:

# pkill -u nikt

Zabić wszystkich

Killall używa nazwy procesu zamiast PID i „zabija” wszystkie instancje procesów o tej samej nazwie. Na przykład, jeśli używasz wielu wystąpień przeglądarki Firefox, możesz zabić je wszystkie za pomocą polecenia:

# zabij firefoxa

W Gnome możesz zrestartować Nautilusa za pomocą polecenia:

# zabij nautilusa

xzabij

Xkill to graficzny sposób „zabicia” aplikacji. Kiedy wpiszesz „XKill” w terminalu, kursor myszy natychmiast zmieni się w „krzyżyk”. Wszystko, co musisz zrobić, to kliknąć „krzyż” na obraźliwej aplikacji, a aplikacja natychmiast ją zabije. Jeśli jesteś zainteresowany, możesz dodać skrót klawiaturowy, aby włączyć funkcję XKill.

Inne używane sygnały

SIGABRT

Ten sygnał wysyła sygnał do procesu, aby przerwał operację. ABRT jest zwykle skierowany na sam proces, gdy wywołuje funkcję abort() języka programowania C w celu zasygnalizowania przerwania, ale może być skierowany z dowolnego procesu, jak każdy inny sygnał.

SIGALRM, SIGVTALRM i SIGPROF

Sygnał ALRM, VTALRM i/lub PROF jest wysyłany do procesu, gdy upłynie limit czasu określony podczas wywoływania funkcji alarmowej (np. settimer).

ALRM

Wysyłane, gdy minie aktualny czas lub zegar.

VTALRM

Wysyłane, gdy czas procesora używany przez proces wygasł.

PROF

Wysyłane, gdy upłynie czas procesora używany przez proces i system w imieniu procesu.

SIGBUS

Sygnał BUS jest wysyłany do procesu, gdy powoduje błąd magistrali. Warunki, które skutkują tym sygnałem, takie jak nieprawidłowe wyrównanie dostępu do pamięci lub brak adresu fizycznego.

SIGCHLD

Sygnał CHLD jest wysyłany do procesu, gdy proces potomny kończy działanie, jest przerywany lub wznawia działanie po przerwaniu. Jednym z typowych zastosowań sygnału jest zasygnalizowanie systemowi operacyjnemu, aby wyczyścił zasoby używane przez proces potomny po jego zakończeniu bez wyraźnego wywołania systemowego.

SIGCONT

Sygnał CONT instruuje system operacyjny, aby zrestartował proces, który został wcześniej zawieszony przez sygnał STOP lub TSTP. Jedną z ważnych cech tego sygnału jest sterowanie działaniem w powłoce Uniksa.

SIGFPE

Sygnał FPE jest wysyłany do procesu, gdy wykonuje on błędną operację arytmetyczną, taką jak dzielenie przez zero.

WCIĄGNĄĆ

Sygnał HUP jest wysyłany do procesu, gdy jego zacisk sterujący jest zamknięty. Pierwotnie miał za zadanie powiadamiać proces po kolejnym spadku linii (HUP odpowiedzialny za „zawieszenia”). W nowoczesnych systemach ten sygnał zwykle oznacza, że ​​sterowanie pseudo lub wirtualnym terminalem zostało zamknięte.

SYGIL

Sygnał ILL wysyłany do procesu, gdy próbuje on wykonać złośliwe, nieznane lub uprzywilejowane polecenia (instrukcje).

ZNAK

Sygnał INT jest wysyłany do procesu z terminala sterującego, gdy użytkownik chce zakończyć proces. Zwykle jest to inicjowane przez naciśnięcie Control-C, ale w niektórych systemach „usuń” lub „przerwij”.

SIGKILL

Sygnał KILL jest wysyłany do procesu w celu natychmiastowego zakończenia. W przeciwieństwie do SIGTERM i SIGINT, tego sygnału nie można przechwycić ani zignorować, a proces odbierający nie może wykonać żadnego czyszczenia po odebraniu tego sygnału.

SIGPIPE

Sygnał PIPE jest wysyłany do procesu, gdy próbuje on pisać do potoku bez procesu podłączonego do drugiego końca.

SIGQUIT

Sygnał QUIT jest wysyłany do procesu z jego terminala sterującego, gdy użytkownik zażąda od procesu wykonania zrzutu.

SIGSEGV

Sygnał SEGV jest wysyłany do procesu, gdy powoduje on nieprawidłowe odwołanie do pamięci wirtualnej lub błąd segmentacji, to znaczy, gdy wykonuje błąd segmentacji.

SIGSTOP

Sygnał STOP nakazuje systemowi operacyjnemu zatrzymanie procesu w celu późniejszego wznowienia.

SIGTERM

Sygnał TERM jest wysyłany do procesu w celu zażądania jego zakończenia. W przeciwieństwie do sygnału zabicia, może on zostać zinterpretowany lub zignorowany przez proces. Dzięki temu proces może wykonać „ładne” wykonanie, aby zatrzymać zwalnianie zasobów i zapisać stan w razie potrzeby. Należy zauważyć, że SIGINT jest prawie identyczny z SIGTERM.

SIGTSTP

Sygnał TSTP jest wysyłany do kontrolującego procesu terminala i nakazuje mu tymczasowe zawieszenie. Zwykle jest to inicjowane przez użytkownika przez naciśnięcie Control-Z. W przeciwieństwie do SIGSTOP, ten proces może zarejestrować procedurę obsługi sygnału lub zignorować sygnał.

SIGTTIN i SIGTTOU

W TTIN i TTOU sygnały są wysyłane do procesu, gdy próbuje on odpowiednio czytać lub pisać z terminala (tty) w tle. Z reguły sygnał ten mogą odbierać tylko procesy sterowane przez panel roboczy; demony nie mają terminali sterujących i nigdy nie powinny odbierać tego sygnału.

SIGUSR1 i SIGUSR2

Sygnały USR1 i USR2 są wysyłane do procesu i wskazują warunki zdefiniowane przez użytkownika.

SIGPOLL

Sygnał POLL jest wysyłany do procesu, gdy wystąpi asynchroniczne zdarzenie we/wy.

SIGSYS

Sygnał SYS jest wysyłany do procesu, gdy przekazuje zły argument do wywołania systemowego.

SIGTRAP

Sygnał TRAP jest wysyłany do procesu, gdy wystąpi warunek, o którego poinformowanie poprosił debugger — na przykład, gdy wykonywana jest określona funkcja lub gdy zmienia się określona wartość zmiennej.

SIGURG

Sygnał URG jest wysyłany do procesu, gdy w gnieździe dostępne są do odczytu pilne dane lub dane spoza zakresu.

SIGXCPU

Sygnał XCPU jest wysyłany do procesu, gdy używa on procesora przez czas dłuższy niż określony przez użytkownika. Przybycie sygnału XCPU gwarantuje, że proces szybko zapisze wszystkie wyniki pośrednie i zakończy się z wdziękiem, zanim zostanie zakończony przez system operacyjny sygnałem SIGKILL.

SIGXFSZ

Sygnał XFSZ jest wysyłany do procesu, gdy plik powiększy się (powyżej określonej wartości) niż maksymalna dozwolona wartość.

SIGRTMIN do SIGRTMAX

Sygnały RTMIN - RTMAX są przeznaczone do użytku niestandardowego. Są to sygnały czasu rzeczywistego.

Różne sygnały

Następujące sygnały nie są standaryzowane przez POSIX, ale czasami są używane w niektórych systemach.

SIGEMT

Sygnał EMT jest wysyłany w procesie, gdy wystąpi przerwanie emulatora.

PODPIS

Sygnał INFO jest wysyłany w procesie, gdy od terminala sterującego odbierane jest żądanie statusu.

SIGPWR

Sygnał PWR jest wysyłany w procesie, gdy system doświadcza awarii zasilania.

SIGLOST

Sygnał LOST jest wysyłany do procesu w przypadku utraty „blokady pliku”.

WCIĄGARKA

Sygnał WINCH jest wysyłany do procesu, gdy jego terminal sterujący zmienia swój rozmiar.

Wysyłanie sygnałów z klawiatury

Sygnały mogą być wysyłane z klawiatury. Poniżej wymieniono kilka standardowych ustawień domyślnych. Domyślne skróty klawiaturowe do wysyłania sygnałów przerwania można zdefiniować za pomocą polecenia stty.

CTRL-C

Wyślij SIGINT (przerwanie). Domyślnie powoduje to zakończenie procesu.

CTRL-Z

Wyślij SIGTSTP (Zawieś). Domyślnie powoduje to zawieszenie wszystkich operacji przez proces.

KLAWISZ KONTROLNY-\

Wyślij SIGQUIT (Wyjdź). Domyślnie powoduje to natychmiastowe zakończenie procesu i zresetowanie jądra.

CTRL-T

Wyślij SIGINFO (INFORMACJE). Domyślnie powoduje to, że system operacyjny wyświetla informacje o poleceniu. Nieobsługiwane we wszystkich systemach.

wniosek

Gdy aplikacje źle działają i powodują zawieszenie systemu, kuszące jest ponowne uruchomienie komputera i ponowne rozpoczęcie sesji. Dzięki tym poleceniom „zabij” możesz lepiej zarządzać niewłaściwym działaniem aplikacji, które powodują lub mogą powodować awarię systemu. Na tym kończę ten temat „Polecenie kill w systemie Unix/Linux”.

Pomimo faktu, że Linux jest bardziej stabilny niż Windows pod względem programów i różnych usług, wszystko się dzieje i czasami konieczne staje się zakończenie procesu Linuksa. Może to być konieczne, jeśli program zawiesił się, gdy uruchomiłeś usługę systemową w tle przez terminal, a nie w systemie inicjującym, aw wielu innych przypadkach, gdy łatwiej jest zabić proces Linuksa, zrestartuj cały system.

W tym artykule przyjrzymy się niektórym z najczęstszych sposobów zakończenia procesu Linuksa. Opiszemy szczegółowo, jak proces się zatrzymuje i jak zrobić wszystko dobrze.

Sterowanie procesem w systemie operacyjnym Linux odbywa się za pomocą sygnałów. W tym zakończenie dowolnego procesu. Sygnały są wysyłane przez system, ale mogą być również wysyłane przez użytkownika za pomocą specjalnych poleceń lub nawet skrótów klawiaturowych w terminalu. Gdy proces otrzymuje sygnał do zakończenia, musi wykonać pewne prace przygotowawcze.

Konieczne jest zakończenie procesów potomnych, usunięcie plików tymczasowych, gniazd i tak dalej. Jednak w zależności od złożoności sytuacji proces może nie odpowiadać na wszystkie sygnały. Rozważ główne sygnały, które są używane do zakończenia procesu:

  • ZNAK- najbardziej nieszkodliwy sygnał zakończenia, czyli Przerwanie. Jest wysyłany do procesu uruchomionego z terminala za pomocą skrótu klawiaturowego Ctrl + C. Proces poprawnie wykonuje wszystkie swoje akcje i zwraca kontrolę;
  • SIGQUIT- jest to kolejny sygnał wysyłany za pomocą skrótu klawiaturowego do programu działającego w terminalu. Mówi mu, aby zakończył, a program może z wdziękiem zakończyć lub zignorować sygnał. W przeciwieństwie do poprzedniego generuje zrzut pamięci. Skrót klawiaturowy Ctrl+/;
  • WCIĄGNĄĆ- informuje proces o zerwaniu połączenia z terminalem kontrolnym, wysyłany głównie przez system w przypadku zerwania połączenia z Internetem;
  • SIGTERM- natychmiast kończy proces, ale jest obsługiwany przez program, co pozwala mu zakończyć procesy potomne i zwolnić wszystkie zasoby;
  • SIGKILL- również natychmiast kończy proces, ale w przeciwieństwie do poprzedniej opcji nie jest przenoszony do samego procesu, ale jest przetwarzany przez jądro. W związku z tym zasoby i procesy podrzędne pozostają uruchomione.

Ważne jest, aby zrozumieć, że musisz dać procesowi szansę na pomyślne zakończenie. Pożądane jest, aby porty i gniazda były zwolnione, zamknięte, a pliki tymczasowe usunięte. Dlatego nigdy nie wysyłaj SIGKILL natychmiast. Wysyłaj sygnały terminacji w kolejności podanej powyżej.

Najpierw ctrl+c, jeśli to możliwe, to SIGTERM - chociaż kończy proces, robi to kulturowo i tylko w ostateczności SIGKILL. A teraz przyjrzyjmy się, jak w praktyce zabić proces przez pid Linux. Jeśli zawsze używasz SIGKILL, przychodzi ci na myśl to zdjęcie:

Jak zabić proces Linuksa?

Narzędzie kill służy do sygnalizowania procesów w systemie Linux. Jego składnia jest bardzo prosta:

$ kill -sygnał_procesu pid

Sygnał jest jednym z powyższych sygnałów zakończenia procesu. Domyślnie, jeśli ten parametr nie jest określony, używany jest sygnał SIGTERM, co jest bardzo poprawne. Musimy również określić, który proces zakończyć. Służy do tego unikalny identyfikator procesu - PID.

Powiedzmy, że mamy uruchomione narzędzie ping. Chcemy zakończyć to zabójstwem. Następnie najpierw sprawdzamy jego identyfikator za pomocą polecenia ps:

ps aux | grep ping

W pierwszym wierszu zostanie wyświetlone samo narzędzie ping, a w drugim — sam program ps. Bierzemy żądany PID i kończymy proces za pomocą SIGTERM:

zabij -TERM 20446

I tylko jeśli po tym poleceniu proces nadal się zawiesza i możesz to sprawdzić, uruchamiając ps. Tylko teraz możesz SIGKILL:

zabij -ZABIJ 20446

Teraz ponownie sprawdzamy:

Jeśli proces działa jako root, to naturalnie musisz użyć sudo. Zabicie procesu przez jego PID nie zawsze jest wygodne, przynajmniej dlatego, że nadal musisz znaleźć ten PID. Moglibyśmy użyć xargs do stworzenia wielu złożonych konstrukcji, aby automatycznie obliczyć pid na podstawie nazwy procesu i natychmiast go zakończyć, ale nie jest to konieczne. Istnieją już specjalne narzędzia.

Jak zabić proces za pomocą pkill

Narzędzie pkill jest opakowaniem dla kill, zachowuje się dokładnie tak samo i ma taką samą składnię, tylko należy przekazać nazwę procesu jako identyfikator procesu. Narzędzie skanuje katalog proc i znajduje PID pierwszego procesu o tej nazwie, a następnie wysyła do niego SIGTERM. Możesz więc zabić proces o nazwie Linux. Na przykład, jeśli chcemy zakończyć ten sam ping:

Możesz także ręcznie ustawić typ sygnału:

pkill -TERM ping

Zamiast ps możesz użyć narzędzia pgrep, aby znaleźć pid procesu, upewnij się, że nasz program jest zakończony:

Ale jeśli program stworzył dla ciebie kilka procesów, na przykład przeglądarka chromu lub Firefox tworzy osobny proces dla każdej z kart, to to narzędzie niewiele pomoże. Oto następna opcja.

Jak zatrzymać proces za pomocą killall

killall działa podobnie do dwóch poprzednich narzędzi. Przyjmuje również nazwę procesu jako parametr i szuka jego PID w katalogu /proc. Ale to narzędzie wykryje wszystkie procesy o tej nazwie i zakończy je. Na przykład:

Jak widać, działa kilka procesów, pozostaje zatrzymać proces Linuksa za pomocą killall:

Polecenie zakończy wszystkie uruchomione narzędzia ping, możesz to sprawdzić, ponownie uruchamiając pgrep:

wnioski

W tym artykule przyjrzeliśmy się, jak zabić proces Linuksa. Czasami to zadanie może być bardzo przydatne, ale ważne jest, aby zrozumieć, że musi być wykonane poprawnie. Nie oznacza to, że przekazywanie SIGKILL zamiast SIGTERM jest bardzo niebezpieczne, ale nie powinieneś tego robić. Mam nadzieję, że te informacje były dla Ciebie pomocne.

Argumentu -9 (lub KILL) w poleceniu kill należy używać tylko w systemach zgodnych z POSIX, jeśli jest to absolutnie konieczne. Dlaczego? Proces nie może obsłużyć sygnału KILL. Oznacza to, że po zakończeniu procesu poleceniem kill -9 procesy potomne pozostaną w pamięci i staną się osierocone, system plików będzie zaśmiecony plikami tymczasowymi, segmenty pamięci dzielonej będą aktywne, gniazda zostaną zawieszone, a atexit(3 ) w ogóle nie zostać wykonanym. W rezultacie istnieje ryzyko napotkania nieoczekiwanych i trudnych do debugowania problemów.

Zamiast tego użyj domyślnego sygnału TERM i użyj KILL tylko wtedy, gdy mniej problematyczne sygnały okażą się nieskuteczne:

$ zabij 6738
$ zabij -INT 6738
$ zabij -HUP 6738
$ zabij -ZABIJ 6738

Jeśli nawet sygnał KILL nie zabije procesu, oznacza to, że proces najprawdopodobniej utknął w operacji wejścia-wyjścia lub jest w innym niezakończonym stanie. Może być konieczne ponowne uruchomienie lub wymuszone odmontowanie wadliwego dysku sieciowego.

Domyślne użycie kill -KILL jest dopuszczalne w przypadku problematycznej aplikacji, na przykład starsze wersje Netscape'a często kończyły się tylko sygnałem KILL. Jest to jednak rzadki wyjątek od reguły: używaj KILL tylko i wyłącznie na znanych aplikacjach.

Problemy występujące podczas kończenia procesów

Sekwencyjne wysyłanie różnych sygnałów może powodować następujące problemy: po pierwsze, pomyślne zakończenie procesu może zająć sekundy, a nawet dziesiątki sekund. Poprawne wykonanie jednego produktu, którego używałem, trwało ponad 30 sekund po otrzymaniu sygnału TERM. Na szczęście ta funkcja została odkryta podczas testów, więc napisano odpowiedni skrypt dla tego przypadku. Po drugie, czasami zdarzają się sytuacje, gdy stary proces zakończył działanie, podczas gdy nowy proces przyjął swój identyfikator w przedziale między sygnałami TERM i KILL. Szczególnie zagrożone są systemy z dużą rotacją procesów i systemy, w których jądro losowo przydziela PID, takie jak OpenBSD. Sprawdzenie nazwy procesu lub jego PPID nie zawsze pomaga, ponieważ nowy proces może być rozwidleniem tego samego rodzica i mieć tę samą nazwę, więc szczególnie paranoiczne skrypty mogą również sprawdzić czas utworzenia procesu lub inne metadane przed wysłaniem sygnału. Być może takie sytuacje są rzadkie, ale warto je rozważyć, jeśli masz do czynienia z krytycznym procesem.

Sygnały zakończenia procesu

Sygnały zakończenia procesu można zidentyfikować na podstawie nazwy lub numeru sekwencji: kill -1 i kill -HUP są równoważne. Jednak użycie nazwy sygnału jest bezpieczniejsze, ponieważ łatwo jest przeliterować argument -1, wysyłając sygnał do innego procesu lub nawet grupy procesów. Ponadto zawsze staraj się używać nazwy w skryptach, ponieważ pomoże ci to lepiej zrozumieć, jaki typ sygnału jest wysyłany do osoby, która będzie czytać twój kod.

Sygnał HUP zawiesza powłokę, więc jest to dobry sposób na wyczyszczenie zawieszonej powłoki oczekującej na wejście lub zamknięcie sesji SSH.

Aby uzyskać więcej informacji na temat sygnałów zakończenia procesu, zobacz

Tak czy inaczej, prędzej czy później staniemy przed koniecznością zabicia błędnego lub zawieszonego procesu Linuks. Tak, niektóre aplikacje w Linuksie czasami się zawieszają, pomimo stabilności ich stabilności. W takich przypadkach będziesz potrzebować wspaniałego narzędzia. Zabić. Zobaczmy, jak korzystać z tego narzędzia.

Każdy proces w Linuks ma swój własny identyfikator o nazwie PID. Zanim będzie można zatrzymać proces, należy go zdefiniować PID. Najważniejsze jest to, że musimy znaleźć ten identyfikator, na przykład otworzyć dowolny program i spróbować znaleźć jego identyfikator.

Zawieszenie identyfikatora procesu

Do wyszukiwania potrzebujemy poleceń ps i grep. Zespół ps- wyświetli nam listę aktywnych procesów w systemie i informacje o nich oraz polecenie grep- wyszuka wyniki polecenia ps. Otwórzmy więc terminal ctrl+alt+t) i spójrz na aktywne procesy

ps axu

Jak już zauważyłeś, lista jest bardzo duża i przewijanie jej w celu znalezienia potrzebnego nam procesu to strata czasu, do tego użyjemy wspaniałego programu grep. Aby znaleźć potrzebny nam proces, po wpisaniu grep określ aplikację, której szukamy. Na przykładzie Viber wygląda to tak:

ps axu | grep viber pol 22685 0.0 1.9 647748 76620 ? Sl 13:01 0:04 /usr/bin/python /usr/bin/viberwrapper-indicator pol 22697 3.0 5.4 5402084 216120 ? Sl 13:01 4:52 /opt/viber/Viber pol 24068 0.0 0.0 17192 2216 pkt/0 S+ 15:41 0:00 grep --color=auto viber

W pierwszym wierszu uruchomionej aplikacji viberwrapper-indicator można przeczytać o tej aplikacji. Druga linia to bezpośrednio sam Viber, którego dziś „wygasimy”, ale jaka jest trzecia linia? Trzeci proces to sam proces grep, ponieważ jako parametr wyszukiwania podaliśmy słowo viber, a grep znalazł się w danych wyjściowych polecenia ps.

Jest inny łatwiejszy sposób, aby się tego dowiedzieć PID proces jest poleceniem pidof, który przyjmuje nazwę procesu jako parametr i wyprowadza jego PID. Uważaj na wielkość liter, jeśli nazwa procesu zaczyna się wielką literą, a piszesz małą (lub odwrotnie), to pidof tego nie weźmie

pidof Viber

Jak już zauważyliście, dostałem 3 linie z aktywną aplikacją Viber

Zakończenie procesu lub prościej „Morderstwo”

Teraz znamy identyfikator procesu Vibera i mamy możliwość „zabicia” go:

zabić 22697

Ogólnie rzecz biorąc, polecenie kill ma na celu wysłanie sygnału do procesu. Domyślnie, jeśli nie określimy żadnych atrybutów, wysyłany jest sygnał SIGTERM (od słowa terminacja - terminacja). SIGTERM nakazuje procesowi zakończenie. Każdy sygnał ma swój własny numer. SIGTERM to liczba 15. Lista wszystkich sygnałów (i ich numerów), które polecenie może wysłać zabić, można wywnioskować wykonując zabić -l. Aby wysłać sygnał SIGKILL (o numerze 9) do procesu 22697, uruchom:

zabij -9 22697

Sygnał SIGTERM może nie zatrzymać procesu (na przykład podczas przechwytywania lub blokowania sygnału), SIGKILL zawsze zabija proces, ponieważ nie można go przechwycić ani zignorować.
Możesz wyświetlić pełną listę atrybutów, uruchamiając polecenie

zabić -l