Linux Kill Sygnał

Linux Kill Sygnał
Ten samouczek wyjaśnia, czym są sygnały zabijania Linux i jak je używać do przerywania, zakończenia, zawieszenia i kontynuowania procesów.

Co to jest sygnały zabijania Linux?

Sygnały zabijania umożliwiają interakcję między różnymi procesami. Konieczne sygnały to powiadomienia o zdarzeniach wysyłane do procesów głównie w celu przerwania, zakończenia, zabijania lub zawieszenia procesów (dlatego używamy terminu „zabójstwo”). Sygnały mogą być wysyłane przez procesy lub jądro, i zwykle są wysyłane, gdy anomalia lub stan wyjątkowy wymaga specjalnego przetwarzania lub gdy użytkownik przerywa lub kończy proces ręcznie (e.G., Podczas naciśnięcia Ctrl+C),

Gdy sygnał jest wysyłany do procesu, ten sygnał lub powiadomienie może spełnić akcję domyślną jako odpowiedź lub może być obsługiwane przez obsługę sygnału. Prowadzący sygnał to niestandardowy kod programu, którego proces otrzymał sygnał, który określa zachowanie procesu po odbieraniu sygnału (z wyjątkiem sygnałów Sigkill i Sigstop, których nie można obsłużyć, ignorować, ani zablokować).

Po wysłaniu sygnału domyślne działania, które mogą mieć miejsce, są następujące:

  • Termin: Proces jest zakończony.
  • Ign: Sygnał jest ignorowany bez wpływu na proces.
  • Rdzeń: Tworzony jest plik zrzutowy.
  • Zatrzymywać się: Proces jest zatrzymany.
  • Cd: Proces wznawia się po zatrzymaniu.

W zależności od sygnału, niektóre z tych działań mogą nastąpić, program może również zawierać obsługę sygnału do wykonania właściwego działania.

Podsumowane: Sygnały to wiadomości dostarczane w celu powiadomienia ich o zdarzeniu.

Dostępne sygnały:

Aby wymienić wszystkie nazwy i liczby sygnałów w systemie, możesz użyć polecenia Kill, a następnie flaga -L, jak pokazano poniżej.

Zabij -l

Jak widać, istnieje 64 sygnały, prawdopodobnie najbardziej znanym przez nas wszystkich jest numer 9 (Sigkill) używany do zakończenia procesów, w tym procesów dziecięcych, natychmiast.

  • Sigkill (9): Sygnał Sigkill służy do natychmiastowego zabijania lub zakończenia procesów. Sygnały Sigkill nie mogą być obsługiwane, ignorowane lub zatrzymywane.
  • Sigstop (19): Ten sygnał ma na celu zatrzymanie lub wstrzymanie procesów, które można później wznowić.
  • Sigcont (18): Sygnał SigCont służy do wznowienia procesów zatrzymanych lub zatrzymanych.

Jak używać sygnałów zabijania:

Prawidłowa składnia do wysyłania sygnałów to:

zabić <-SignalName>

Lub

zabić <-SignalNumber>

Możesz zastąpić IR nazwiskami lub liczbami, które otrzymaliśmy wcześniej podczas uruchamiania polecenia Kill -l. PID to identyfikator procesu, którego możesz się nauczyć, używając polecenia PS, jak pokazano w następujących instrukcjach.

Aby rozpocząć praktyczną sekcję tego samouczka, spróbujmy sigstop i sigcont, aby zatrzymać proces, a następnie wznowić.
W pierwszym przykładzie stworzyłem mały kod LinuxhintSignal, który nieustannie drukuje „Linuxhint.com”Jak pokazano na zrzucie ekranu poniżej.

Wysłać sygnał do procesu, zanim będę musiał nauczyć się jego PID. Aby zobaczyć identyfikator procesu (PID), musisz uruchomić Ps Komenda. W moim przypadku jestem tym, który wykonał proces, więc używam Ps polecenie, a następnie -u flaga, aby pokazać tylko moje procesy.

Notatka: Aby uzyskać więcej instrukcji na polecenie PS, przeczytaj za pomocą polecenia PS w Linux.

Jak widać, PID biegu Linuxhintsignal Skrypt to 16182.

Poniższy zrzut ekranu pokazuje dwa terminale; Prawy terminal pokazuje dostarczenie sygnału SIGSTOP do procesu 16182. Lewy terminal pokazuje, w jaki sposób proces jest zatrzymany po wysyłaniu sygnału.

KILL -SIGSTOP

Jak widać na właściwym terminalu, proces został poprawnie zatrzymany.

Musisz wysłać sygnał SigCont, aby wznowić wykonanie procesu, jak pokazano na zrzutach ekranów poniżej.

Kill -Sigcont

Jak widać, proces wznowiony.

Możesz osiągnąć ten sam wynik, zastępując nazwy sygnałów dla ich liczb. Poniższy przykład powtarza poprzedni scenariusz, ale tym razem definiuje sygnały według ich liczb.

Poniższy przykład pokazuje również, w jaki sposób Sigkill jest dostarczany do procesu 17721, aby go zatrzymać. Tym razem zamiast określać nazwę sygnału, określam numer sygnału zwrócony przez Zabij -l polecenie, w tym przypadku 19 dla sygnału sigstop.

Zabij -19

Poniższy zrzut ekranu pokazuje, jak określić sygnał SigCont, również używając jego numeru zamiast nazwy.

Zabij -18

Jak widać, wynik jest taki sam podczas używania nazwy lub numeru sygnału.

Jak wspomniano wcześniej, sygnał Sigkill służy do pełnego zakończenia procesu; jest to prawdopodobnie najczęściej używany sygnał przez użytkowników.

Jak widać w poniższym przykładzie, w którym Sigkill jest zaimplementowany z jego liczbą (9), skrypt został w pełni zakończony lub zabity.

Zabij -9

Inne ważne sygnały:

  • Sigint: Ten sygnał jest dostarczany, gdy użytkownik poprosi o przerwanie procesu (e.G., Ctrl+C).
  • Igm: Sygnał SIGTERM jest dostarczany w celu żądania rozwiązania procesu, ale tylko po to, aby żądać i nie zakończyć. W przeciwieństwie do Sigkill lub Sigstop, ten sygnał może być obsługiwany, blokowany lub ignorowany.
  • PIECZĘĆL: Ten sygnał służy do zakończenia procesów jako przyczyny błędu, takiego jak błędy działania lub wykonywanie. Tego sygnału nie można zignorować.
  • Sigchld: Używane do powiadamiania procesów nadrzędnych o zdarzeniach procesów dzieci.
  • Wzdychanie: Ten sygnał jest wyzwalany, gdy połączenie jest nagle przerwane.
  • Sigpipe: Ten sygnał jest wysyłany do procesów próbujących napisać do rury bez końca odczytu lub których nie można odczytać.
  • Sigquit: Ten sygnał jest podobny do Sigint, ale wytwarza zrzut rdzenia.

Wniosek:

Używanie sygnałów Linux do zabijania, zatrzymania, zatrzymania procesów, między innymi, jest podstawową wiedzą, który musi przechowywać każdy użytkownik Linux. Głęboka znajomość sygnałów jest szczególnie istotna dla programistów, którzy muszą upewnić się, że obsługi sygnałów nie tworzą niechcianych wpływów na system. Jak widać, istnieją dziesiątki dostępnych sygnałów; Ten samouczek skupił się tylko na najczęstszych. Więcej informacji na temat sygnałów Linux na stronie https: // www.gnu antylopa.org/software/libc/manual/html_node/standard-signals.html.

Dziękujemy za przeczytanie wskazówki Linuksa; Śledź nas, aby uzyskać więcej wskazówek i samouczków Linux.