Какво е "зомби процес" на Linux?

Съдържание:

Какво е "зомби процес" на Linux?
Какво е "зомби процес" на Linux?

Видео: Какво е "зомби процес" на Linux?

Видео: Какво е
Видео: The Internet of Things by James Whittaker of Microsoft - YouTube 2024, Април
Anonim
Ако сте потребител на Linux, може да сте видели зомби процеси, които се намират около вашия списък с процеси. Не можеш да убиеш зомби, защото вече е мъртъв - като истински зомби.
Ако сте потребител на Linux, може да сте видели зомби процеси, които се намират около вашия списък с процеси. Не можеш да убиеш зомби, защото вече е мъртъв - като истински зомби.

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

Какво представлява процесът на зомби?

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

Когато процесът умре на Linux, не всичко е изтрито от паметта незабавно - процесният дескриптор остава в паметта (дескрипторът на процеса взема само малко количество памет). Статусът на процеса става EXIT_ZOMBIE, а родителят на процеса е уведомен, че неговият детски процес е умрял с сигнала SIGCHLD. След това родителският процес трябва да изпълни системното повикване wait (), за да прочете изходното състояние на процеса на мъртва и друга информация. Това позволява на родителския процес да получи информация от мъртвия процес. След като изчакваме чакането (), процесът на зомбита се премахва напълно от паметта.

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

Помощни програми като GNOME System Monitor, връх командата и к.с. командата показва зомби процеси.

Image
Image

Опасностите от зомби процеси

Процесите на зомбита не използват никакви системни ресурси. (Всъщност всяка от тях използва много малка част от системната памет, за да съхранява своя дескриптор на процеса.) Всеки процес на зомби обаче запазва идентификационния процес (PID). Линукс системите имат ограничен брой идентификатори на процесите - 32767 по подразбиране за 32-битови системи. Ако зомбита се натрупват с много бърза скорост - например, ако неправилно програмираният сървър на софтуер създава зомби процеси под натоварване - целият пул от налични PIDs ще бъде присвоен на зомби процеси, предотвратявайки стартирането на други процеси.

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

Image
Image

Да се отървете от зомби процеси

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

Един от начините е изпращането на сигнала SIGCHLD към родителския процес. Този сигнал указва на родителския процес да изпълни системното повикване wait () и да изчисти своите деца с зомби. Изпратете сигнала с убивам команда, замяна PID в командата по-долу с PID на родителския процес:

kill -s SIGCHLD pid

Ако обаче родителският процес не е програмиран правилно и игнорира SIGCHLD сигналите, това няма да помогне. Ще трябва да убиете или да затворите родителския процес на зомбита. Когато процесът, който създава зомбита, завършва, init наследява процесите на зомбита и става нов родител. (init е първият процес, стартиран на Linux при зареждане и е назначен за PID 1.) init периодично изпълнява системното повикване wait () за да изчисти своите зомби деца, така че init ще направи кратка работа на зомбита. Можете да рестартирате родителския процес след затварянето му.

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

Препоръчано: