Зомби процеси

Четене на запис от елав Спомних си, че във форум някой поиска помощ, тъй като системата им беше бавна, някои от решенията бяха фокусирани върху процеси.

Основните състояния на процесите в Linux са:
Спящ (S) : Процеси, които чакат своя ред за изпълнение.
Бягане (R) : Процеси, които се изпълняват.
Чакане (D) : Процеси, изчакващи операцията за влизане / излизане да бъде завършена.
Зомби (Z) : Процеси, които са приключили, но продължават да се показват в таблицата на процесите. Те могат да бъдат причинени от грешки в програмирането и могат да бъдат симптом на бавна или причиняваща проблеми система.

Процесът зомби е този, който никога не е получавал сигнал от родителския процес, който го е създал, а дъщерен процес е този, който води началото си от процес на по-високо ниво, известен като родителски процес, който е отговорен за изпращането на сигналите към дъщерните процеси генерирани от него, за да покажат, че техният живот е приключил.

Те могат да бъдат причинени от грешки в програмирането и могат да бъдат симптом на бавна или причиняваща проблеми система. Тази ситуация обикновено се случва, също така защото някои конфигурация не е била обмислена от разработчика.

В Уикипедия можете прочети повече за тези процеси.

Изпълнявайки най-горната команда, можем да видим в реално време процесите, които се изпълняват в системата, и тя ще посочи дали има такива в зомби състояние, но не посочва кой.

процес

За да видите всички процеси, въведете в терминала: ps aux, и да видите само зомбитата: ps -el | grep 'Z'o ps -A -остат, ppid, pid, cmd | grep -e '^ [Zz]'

alf @ Alf ~ $ ps -A -остат, ppid, pid, cmd | grep -e '^ [Zz]'

Z 1945

Ако при изброяване на процесите човек се появи със статус Z, това означава, че е зомби, което от своя страна означава, че приложението не е добре решено или има грешки, знаейки, че неговият PID може да бъде премахнат чрез изпълнение на команда, подобна на, в терминала, в този пример: 

alf @ Alf ~ $ kill -9 1945

Когато имате много зомби процеси или поне повече от един, можете да използвате следната команда, която ги убива, тя работи само за това, ако я стартирате, без да имате зомби процеси, нищо няма да се случи:

alf @ Alf ~ $ sudo kill -HUP `ps -A -стат, ppid, pid, cmd | grep -e '^ [Zz]' | awk '{print $ 2}' ''

поздрави


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   надлежен каза той

    🙁

  2.   "Оскар" каза той

    Благодаря, много добър принос, ще спестя командите, за да правя периодични проверки.

  3.   Мистификация каза той

    Благодаря, хубава статия.

  4.   MSX каза той

    Няколко разяснения относно вашата статия:

    Терминът "процес на зомби" е технически неподходящ и тези от нас, които имат малко опит с GNU / Linux, трябва да избягват да го използват, тъй като няма процес, който да се изпълнява сам по себе си, но това е само препратка към процес, който вече не съществува в система и той не пусна своя идентификатор.

    „Зомби процес“ всъщност е записът в таблицата за картографиране на идентификатора на процеса (дескриптор на процеса), точно това, така че той не консумира ресурси над няколко байта памет, които системата използва, за да следи таблицата на процесите.

    Единственият проблем, който може да има с призрачните (или зомби) дескриптори на регистъра, е, че ако тези хайвери станат твърде бързо, те теоретично биха могли да заемат цялата таблица за разпределение на дескриптора на процеса, оставяйки системата без място за нови записи, така че потенциално би било невъзможно да стартирате нови програми - които записват техните процеси - в крайна сметка обесват машината.

    Това обаче е почти невъзможно да се случи, тъй като в 32-битовите системи има 32767 64 пространства за регистриране на процеси (рядко или никога не се използват) и два пъти повече в XNUMX-битова система.

    Единственият начин да накарате системния застой с лошо премахнати мъртви процеси е да създадете процесите и да ги убиете бързо, без да почиствате правилно дескриптора на процеса (т.е. създаване на „зомби процеси“), но нека си признаем, ако някой иска да закачи система има много по-преки начини от това. да започнете бързо да създавате нови процеси по експоненциален начин, които да блокират системата и да я закачат; един от начините да постигнете това с вилична бомба:

    : () {: |: &};:

    Можете да направите системата относително устойчива на вилка бомба, като конфигурирате правилно /etc/security/limits.conf, въпреки че трябва да се има предвид, че колкото повече ограничаваме възможността за създаване на нови процеси, ще можем да стартираме по-малко приложения едновременно в нашата система. Това обаче е валиден инструмент за всички параноични sysadmin, които искат да имат много фин контрол над своите системи!

    Тази статия съдържа добра информация за невалидни дескриптори на процеса:
    http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
    И тук има ясно обяснение за това как работи виличната бомба: http://stackoverflow.com/questions/991142/how-does-this-bash-fork-bomb-work

    Salu2

    1.    Джотаеле каза той

      msx: «Терминът„ процес на зомби “е технически неподходящ и тези от нас, които имат малко опит в GNU / Linux, трябва да избягват да го използват ...» Ха ха ха. Има само нещо по-голямо от гордостта ви: лошият ви вкус. Ей, това е в лош вкус, което си направил, ако искаш да изнесеш лекция, да вземеш такава във факултета или да пуснеш собствен блог и да напишеш каквото искаш, но да дойдеш тук, за да коригираш апартамента на добър Алф, наистина е с лош вкус .

      1.    Фернандо Рохас каза той

        Истината ми се стори доста интересен коментар. Много повече от публикацията

  5.   платонов каза той

    благодаря ти много интересно.

  6.   Гниене87 каза той

    отлична статия благодаря

  7.   Алф каза той

    MSX
    «Терминът„ процес на зомби “е технически неподходящ и тези от нас, които имат малко опит в GNU / Linux, трябва да избягват да го използват»

    Ще трябва да уведомим разработчиците, тъй като както ще видите, терминът зомби също се използва, там го прочетох на конзолата.

    поздрави

  8.   град каза той

    Поздравления, много добра статия, винаги съм имал съмнения, че те са PZ, но никога не съм имал време да разследвам, сега отивам на страницата и попадам на отговора благодаря ......

  9.   truko22 каза той

    В KDE със системата за управление + система за бягство излизат и ние можем бързо да убием тези зомбита.

  10.   Дъжд каза той

    Корекция, това е ZOMBIE, а не ZOMBIE процес
    Zombie е на английски
    Зомби на испански

  11.   Елинкс каза той

    Лукс, благодаря!

  12.   Roberto каза той

    Първо, терминът зомби процес изглежда напълно правилен. Също така терминът е най-малко важен.
    Въпросът е, че както показва msx и същата уикипедия (прочетох статията) процесът на зомбиране наистина е мъртъв.
    «Когато процесът завърши, цялата негова памет и свързаните с него ресурси се разменят, така че да могат да се използват от други процеси. Както и да е, записът на процеса в таблицата на процесите все още остава »
    Тоест процесът вече не заема системни ресурси, следователно натоварването на системата е минимално, както е обяснено от msx.
    Единственото нещо, което има, е невалиден запис в таблицата на процесите ... което, ако има хиляди от тях, може би ще бъде товар (в края на краищата процесорът трябва да прочете таблицата на процеса и ще прочете много безполезна информация) в допълнение към отразяване на лоши практики за програмиране (някой прави лошо направени приложения).
    Но само по себе си обяснението на публикацията не е толкова правилно и правилното ще бъде това, дадено от msx.