20Aug

Шта је "зомби процес" на Линуку?

Ако сте корисник Линука, можда сте видели зомбијеве процесе који се преплићу око листе процеса.Не можете убити зомби процес јер је већ мртав - као стварни зомби.

Зомбији су у основи остаци остатака мртвих процеса који нису правилно очишћени.Програм који ствара зомби процесе није правилно програмиран - програми не требају дозволити да се зомби процеси држе.

Имаге Цредит: Даниел Холлистер на Флицкр( Ремикед)

Шта је процес зомби?

Да бисте разумели шта је процес зомби и шта узрокује процес зомби, мораћете да разумете мало како процеси раде на Линук-у.

Када процес умре на Линуку, све се не уклања из меморије одмах - његов дескриптор остаје у меморији( процесни дескриптор користи само малу количину меморије).Статус процеса постаје ЕКСИТ_ЗОМБИЕ и родитељ процеса се обавештава да је његов дечији процес умро са СИГЦХЛД сигналом.Тада родитељски процес би требао извршити системски позив ваит() да би прочитао статус излазног мртвог процеса и друге информације.Ово омогућава родитељском процесу да добије информације из мртвог процеса.Након чекања() се зомби процес потпуно уклони из меморије.

Ово се обично дешава веома брзо, тако да нећете видети зумске процесе који се акумулирају на вашем систему.Међутим, ако родитељски процес није правилно програмиран и никада не позива чак() , његови деца зомби ће се држати у меморији док се не очисте.

Утилитиес као што су ГНОМЕ Систем Монитор, топ команда, и пс командни приказ зомби процеса.

Опасности од зомбијевих процеса

Процеси зомби не користе никакве системске ресурсе.(Заправо, свако користи веома малу количину системске меморије за чување дескриптора процеса.) Међутим, сваки процес зомби задржава свој ИД процеса( ПИД).Линук системи имају ограничен број идентификационих процеса - 32767 по подразумеваној вредности на 32-битним системима.Ако се зомбији акумулирају веома брзом брзином - на пример, ако непрописно програмирани серверски софтвер креира зомби процесе под оптерећењем - читав базен расположивих ПИД-ова ће се временом доделити процесима зомби, спречавајући да други процеси не буду покренути.

Међутим, неколико зомбијевих процеса који се обилазе не представљају проблем - иако указују на грешку са својим родитељским процесом на вашем систему.

Побољшање процеса зомби

Не можете убити зомби процесима јер можете убити нормалне процесе помоћу сигнала СИГКИЛЛ - процеси зомбија су већ мртви.Имајте на уму да вам не треба да се решите зомбијевих процеса, осим ако имате велику количину на вашем систему - неколико зомбија је безопасно.Међутим, на неколико начина можете се ослободити зомбијевих процеса.

Један од начина је слање СИГЦХЛД сигнала родитељском процесу.Овај сигнал говори родитељском процесу да изврши системски позив() и очисти децу зомби.Пошаљите сигнал помоћу убијања наредбе, замењујући пид у наредној команди са ПИД матичног процеса:

килл -с СИГЦХЛД пид

Међутим, ако родитељски процес није правилно програмиран и игнорише сигнале СИГЦХЛД, ово је освојилоНе помажеш.Мораћете да убијете или затворите родитељски процес зомбија.Када се процес који је створио зомбије завршава, инит наслеђује процес зомби и постаје њихов нови родитељ.(инит је први процес који је започео на Линуку при покретању и додељен је ПИД-у 1.) инит периодично извршава системски позив ваит() да би очистио своју децу зомби, тако да ће инит направити кратак рад зомбија.Можете га поново покренути након затварања.

Ако родитељски процес настави да ствара зомбије, требало би да буде исправљен тако да правилно позива позивање() да би пожелео децу зомби.Датирајте извештај о грешци ако програм на вашем систему настави са стварањем зомбија.