Czytanie wpisu z pełen życia Przypomniałem sobie, że na forum ktoś poprosił o pomoc, ponieważ ich system był powolny, niektóre rozwiązania skupiały się na procesach.
Główne stany procesów w Linuksie to:
Śpiące (S) : Procesy, które czekają na swoją kolej.
Bieganie (R) : Uruchomione procesy.
Czekam (D) : Procesy oczekujące na zakończenie operacji wejścia / wyjścia.
Zombi (Z) : Procesy, które zakończyły się, ale nadal pojawiają się w tabeli procesów. Mogą być spowodowane błędami programowania i mogą być objawem powolnego lub powodującego problemy systemu.
Proces zombie to taki, który nigdy nie otrzymał sygnału od procesu nadrzędnego, który go utworzył, proces potomny to taki, który ma swój początek w procesie wyższego poziomu znanym jako proces nadrzędny, który jest odpowiedzialny za wysyłanie sygnałów do procesów potomnych generowane przez nią, aby wskazać, że ich żywotność dobiegła końca.
Mogą być spowodowane błędami programowania i mogą być objawem powolnego lub powodującego problemy systemu. Taka sytuacja zwykle ma miejsce, także dlatego, że deweloper nie rozważał jakiejś konfiguracji.
W Wikipedii możesz czytaj więcej o tych procesach.
Wykonując górną komendę, możemy zobaczyć w czasie rzeczywistym procesy, które są wykonywane w systemie i wskaże, czy są jakieś w stanie zombie, ale nie wskazuje, który z nich jest.
Aby zobaczyć wszystkie procesy, wpisz terminal: ps auxi zobaczyć tylko zombie: ps -el | grep 'Z'o ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]'
alf @ Alf ~ $ ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]'
Z 1945
Jeśli przy wyświetlaniu procesów pojawia się status Z, oznacza to, że jest to zombie, co z kolei oznacza, że aplikacja nie została dobrze rozwiązana lub ma błędy, znając jej PID można usunąć, wykonując polecenie podobne do w terminalu, w tym przykładzie:
alf @ Alf ~ $ kill - 9 1945
Kiedy masz wiele procesów zombie lub co najmniej więcej niż jeden, możesz użyć następującego polecenia, które je zabije, działa tylko w tym celu, jeśli uruchomisz go bez procesów zombie, nic się nie stanie:
alf @ Alf ~ $ sudo kill -HUP `ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]' | awk '{print $ 2}' ''
pozdrowienia
🙁
Dziękuję bardzo dobry wkład, mam zamiar zapisać polecenia do okresowych kontroli.
Dzięki, fajny artykuł.
Kilka wyjaśnień dotyczących Twojego artykułu:
Termin „proces zombie” jest technicznie nieodpowiedni i ci z nas, którzy mają niewielkie doświadczenie z GNU / Linuksem, powinni unikać jego używania, ponieważ nie istnieje proces sam w sobie, ale jest to tylko odniesienie do procesu, którego już nie ma w system i nie ujawnił swojego identyfikatora.
„Proces zombie” jest w rzeczywistości wpisem w tabeli odwzorowań identyfikatora procesu (deskryptora procesu), tak więc nie zużywa zasobów poza kilka bajtów pamięci, których system używa do śledzenia tablicy procesów.
Jedynym problemem, który może występować w przypadku deskryptorów rejestru widm (lub zombie), jest to, że jeśli pojawią się zbyt szybko, teoretycznie mogą zająć całą tablicę alokacji deskryptorów procesu, pozostawiając system bez miejsca na nowe rekordy, więc potencjalnie może być niemożliwe do uruchomienia nowych programów - które rejestrują ich procesy - ostatecznie zawieszając maszynę.
Jest to jednak prawie niemożliwe, ponieważ w systemach 32-bitowych jest 32767 64 miejsc na rejestrację procesów (rzadko lub nigdy nie używanych) i dwukrotnie więcej w systemie XNUMX-bitowym.
Jedynym sposobem na awarię systemu z błędnie usuniętymi martwymi procesami jest utworzenie procesów i ich szybkie zabicie bez poprawnego czyszczenia deskryptora procesu (czyli tworzenia „procesów zombie”), ale spójrzmy prawdzie w oczy, jeśli ktoś chce zawiesić system istnieje znacznie bardziej bezpośrednie sposoby niż to. szybkie rozpoczęcie tworzenia nowych procesów w sposób wykładniczy, które blokują system i zawieszają go; jeden ze sposobów osiągnięcia tego za pomocą bomby widelcowej:
: () {: |: &};:
Możesz uczynić system stosunkowo odpornym na widelec bomby, odpowiednio konfigurując /etc/security/limits.conf, chociaż trzeba wziąć pod uwagę, że im bardziej ograniczymy możliwość tworzenia nowych procesów, tym mniej aplikacji będziemy mogli uruchamiać jednocześnie w naszym systemie. Jednak jest to ważne narzędzie dla wszystkich paranoicznych administratorów, którzy chcą mieć bardzo dokładną kontrolę nad swoimi systemami!
Ten artykuł zawiera dobre informacje na temat nieprawidłowych deskryptorów procesów:
http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
I w tym jest jasne wyjaśnienie, jak działa bomba widelca: http://stackoverflow.com/questions/991142/how-does-this-bash-fork-bomb-work
Salu2
msx: „Termin„ proces zombie ”jest technicznie nieodpowiedni i ci z nas, którzy mają niewielkie doświadczenie w GNU / Linuksie, powinni go unikać…» Ha ha ha. Jest tylko coś więcej niż twoja duma: twój zły gust. Hej, to co zrobiłeś jest w złym guście, jeśli chcesz wygłosić wykład, zdobyć go na wydziale lub założyć własnego bloga i pisać, co chcesz, ale przyjechanie tutaj, aby poprawić mieszkanie na dobre, Alf jest naprawdę w złym guście .
Prawda wydała mi się dość interesującym komentarzem. Znacznie więcej niż post
dziękuję bardzo interesująco.
doskonały artykuł dzięki
msx
„Termin„ proces zombie ”jest technicznie niewłaściwy i ci z nas, którzy mają niewielkie doświadczenie w GNU / Linuksie, powinni go unikać”
Będziemy musieli powiadomić programistów, ponieważ jak zobaczysz, termin zombie jest również używany, tam przeczytałem go na konsoli.
pozdrowienia
Gratulacje, bardzo dobry artykuł, zawsze miałem wątpliwości, że to PZ, ale nigdy nie miałem czasu, żeby to sprawdzić, teraz przechodzę na stronę i trafiam na odpowiedź, dziękuję …….
W KDE z systemem kontroli + ucieczki działania wychodzą i możemy szybko zabić te zombie.
Poprawka, to proces ZOMBIE, a nie ZOMBIE
Zombie jest w języku angielskim
Zombi w języku hiszpańskim
Luksus, dziękuję!
Po pierwsze, termin proces zombie wydaje się całkowicie poprawny. Również termin jest najmniej ważny.
Chodzi o to, że jak wskazuje msx, i ta sama wikipedia (przeczytałem artykuł), proces zombie jest naprawdę martwy.
„Po zakończeniu procesu cała jego pamięć i powiązane zasoby są usuwane, aby mogły być używane przez inne procesy. W każdym razie pozycja procesu w tabeli procesów nadal pozostaje »
Oznacza to, że proces nie zajmuje już zasobów systemowych, dlatego obciążenie systemu jest minimalne, jak wyjaśnia msx.
Jednak jedyne, co ma, to niepoprawny wpis w tablicy procesów ... który, jeśli jest ich tysiące, może byłby to obciążenie (w końcu procesor musi odczytać tablicę procesów i odczytałby wiele bezużytecznych informacji) oprócz odzwierciedlenia złych praktyk programistycznych (ktoś tworzy źle wykonane aplikacje).
Ale samo w sobie wyjaśnienie postu nie jest tak poprawne i poprawne byłoby to podane przez msx.