Jak znaleźć i zabić proces zombie w Linux

Jak znaleźć i zabić proces zombie w Linux
Zombie to stworzenie, które było człowiekiem i umarło, ale jakoś z powodu wirusa lub jakiegokolwiek powodu, w którym się obudził. Jest już martwy, ale idzie i porusza. To jest koncepcja zombie opisanej w filmach i powieściach. W ten sam sposób w Linux proces zombie to proces usunięty z systemu jako „nieistotny”, ale w jakiś sposób uruchomi się w pamięci systemowej nazywa się procesem zombie. Dopóki proces dziecięcy nie zostanie wyeliminowany z tabeli procesów, najpierw zamienia się w zombie.

Proces w stanie zakończony to inna nazwa. Jest oczyszczany z pamięci za pomocą procesu nadrzędnego. Gdy proces nadrzędny nie zostanie powiadomiony o zmianie, proces dziecięcy staje się procesem zombie i nie otrzymuje żadnego sygnału zakończenia, aby mógł opuścić pamięć. W Linux, za każdym razem, gdy proces jest usuwany z pamięci, jego proces nadrzędny jest informowany o usunięciu. Proces ten pozostaje w pamięci, dopóki nie powiadomi o procesie nadrzędnym.

Oznacza to, że proces martwy nie jest natychmiast usuwany z pamięci i kontynuuje w pamięci systemowej, stając się w ten sposób procesem zombie. Aby usunąć proces zombie, proces nadrzędny wywołuje funkcję Wait (). Po wezwaniu funkcji Wait () proces zombie jest całkowicie usuwany z systemu.

Zabijanie procesu zombie

Przed przejściem do zabicia procesu zombie najpierw omówimy ryzyko procesu zombie i przyczyny zachodzącego procesu zombie. Dowiemy się również więcej o procesie zombie, aby ułatwić zrozumienie procesu zabijania.

Jaka jest przyczyna procesu zombie

Mogą istnieć dwie główne przyczyny procesu zombie. Pierwszy to ten, w którym proces nadrzędny nie może wywołać funkcji Wait (), gdy działa proces tworzenia dzieci, co prowadzi do ignorowania Sigchld. Może to spowodować proces zombie. Drugi to ten, w którym druga aplikacja może wpłynąć na wykonanie procesu nadrzędnego z powodu złego kodowania lub złośliwej treści.

Innymi słowy, możemy powiedzieć, że proces zombie jest spowodowany, gdy proces nadrzędny ignoruje zmiany stanu procesu dziecka lub nie może sprawdzić stanu procesu dziecka, gdy proces dziecka kończy się PCB.

Czy proces zombie stanowią ryzyko

Proces zombie nie stanowi żadnego ryzyka, po prostu używają części pamięci w systemie. Tabela procesu jest niewielka rozmiar, ale identyfikator tabeli, w którym przechowywany jest proces zombie. Ale w przypadku wielu procesów zombie rezerwujących lokalizację pamięci i nie pozostało miejsca na inne procesy, trudno jest działać inne procesy.

Znalezienie procesu zombie

Przed zabiciem procesu zombie należy je znaleźć. Aby znaleźć proces zombie, uruchomimy następujące polecenie w terminalu:

Linux@Linux-virtualbox: ~ $ ps Aux | egrep „z | defunct”

W powyższym poleceniu „PS” oznacza stan procesu, który jest używany do wyświetlania stanu procesu działającego w systemie wraz z poleceniem PS. Przeszliśmy flagę Aux, w której „A” wskazuje szczegóły wszystkich powiązanych procesów w terminalu, „U” wskazuje procesy znajdujące się na liście użytkowników, a „x” wskazuje procesy, które nie są wykonywane z terminalu. W połączeniu możemy powiedzieć, że służy do drukowania wszystkich działających procesów, które są przechowywane w pamięci.

Druga opcja przekazana „EGREP” to narzędzie przetwarzania, które służy do pobierania wyrażeń lub wzorów w określonej lokalizacji. Na koniec przekazaliśmy słowo kluczowe „Z |. Kiedy wykonamy polecenie, otrzymamy następujące dane wyjściowe, które pokazuje proces zombie w systemie wraz z „PID”.

Wyjście:

Użytkownik PID %CPU %MEM VSZ RSS TTY TTY Stat START TIME Command
Linux 33819 0.0 0.0 18008 724 pkt/0 s+ 20:22 0:00 grep -e -color = automatyczne z |

Procesy zombie są już martwymi procesami, ale proces nadrzędny nie jest w stanie odczytać jego statusu i nie można go zwolnić z pamięci. Zatem nie można zabić martwego procesu. Możemy zrobić tylko dla nich, aby umożliwić procesowi nadrzędnemu odczytanie stanu dziecięcego, aby można go było wykonać i usunąć z tabeli procesu. W tym celu uruchomimy poniższe polecenie.

Linux@Linux -virtualbox: ~ $ ps -o ppid = -p 33819

W powyższym poleceniu próbowaliśmy uzyskać identyfikator nadrzędny procesu zombie. Po uzyskaniu identyfikatora nadrzędnego uruchomiąc następujące polecenie, aby zabić proces zombie, wysyłając sigchld do procesu nadrzędnego, który umożliwia procesowi nadrzędne odczytanie stanu dziecka:

Linux@Linux -virtualbox: ~ $ Kill -s Sigchld Parent_pid

W powyższym poleceniu przekazujemy sygnał do identyfikatora nadrzędnego, aby zabić proces zombie z identyfikatorem nadrzędnego. Po wykonaniu powyższego polecenia po prostu przejdzie do następnego wiersza bez drukowania dowolnego wyjścia na terminalu na wypadek, gdyby nie istniał identyfikator nadrzędny. Aby sprawdzić proces, czy proces zombie zostanie zabity, czy nie, możesz uruchomić polecenie, które już wykonaliśmy, aby znaleźć proces zombie.

Wypróbujmy inny sposób na zabicie procesu zombie, który odbywa się poprzez zabicie samego procesu rodzica. Jest to bardziej wydajny sposób zabicia procesu zombie, ponieważ całkowicie usunie cały proces i nie pozwoli zombie powtórzył się. W tym celu uruchomimy polecenie poniżej Shown:

Linux@Linux -virtualbox: ~ $ KILL -9 Parent_pid

Po uruchomieniu powyższego polecenia pozwalamy systemowi zabić proces nadrzędny.

Wniosek

Krótko omówiliśmy proces zombie, a także przyczyny i procedurę zabijania tych procesów. Przed udaniem się do naszego procesu zabijania próbowaliśmy wyjaśnić przyczyny ich przyczyny, a także sposobów identyfikacji ich za pomocą prostych poleceń.