Шта је „зомби процес“ на Линуку?
Ако сте корисник Линука, можда сте видјели да се зомби процеси лете око ваше листе процеса. Не можете убити зомби процес јер је већ мртав - као стварни зомби.
Зомбији су у основи остаци мртвих процеса који нису исправно очишћени. Програм који ствара зомби процесе није правилно програмиран - програми не би требало да допусте да се зомби процеси задрже.
Имаге Цредит: Даниел Холлистер он Флицкр (Ремикед)
Шта је Зомби процес?
Да бисте разумели шта је зомби процес и шта узрокује појаву зомби процеса, мораћете мало да разумете како процеси функционишу на Линуку.
Када процес умре на Линуку, он се не уклања одмах из меморије - његов дескриптор процеса остаје у меморији (процесни дескриптор узима само малу количину меморије). Статус процеса постаје ЕКСИТ_ЗОМБИЕ и родитељ процеса је обавијештен да је његов дјечији процес умро са сигналом СИГЦХЛД. Родитељски процес тада треба да изврши системски позив ваит () да би прочитао излазни статус мртвог процеса и друге информације. Ово омогућава родитељском процесу да добије информације из мртвог процеса. После позива () чека се зомби процес потпуно уклоњен из меморије.
То се обично догађа врло брзо, тако да нећете видети да се зомби процеси накупљају на вашем систему. Међутим, ако родитељски процес није правилно програмиран и никада не позива на чекање (), његова зомби дјеца ће остати у меморији док се не очисте.
Услужни програми као што је ГНОМЕ Систем Монитор топ команду, и пс цомманд дисплаи зомби процеси.
Опасности од зомби процеса
Зомби процеси не троше системске ресурсе. (Заправо, сваки користи веома малу количину системске меморије за складиштење свог дескриптора процеса.) Међутим, сваки зомби процес задржава свој ИД процеса (ПИД). Линук системи имају коначан број процесних ИД-ова - 32767 по дефаулту на 32-битним системима. Ако се зомбији нагомилавају веома брзо - на пример, ако неправилно програмирани серверски софтвер ствара зомби процесе под оптерећењем - цео скуп доступних ПИД-ова ће на крају постати додељен зомби процесима, спречавајући покретање других процеса.
Међутим, неколико зомби процеса који се врте около нису проблем - иако они указују на грешку са својим надређеним процесом на вашем систему.
Геттинг Рид оф Зомбие Процессес
Не можете убити зомби процесе јер можете убити нормалне процесе са СИГКИЛЛ сигналом - зомби процеси су већ мртви. Имајте на уму да не морате да се отарасите зомби процеса осим ако имате велики износ на вашем систему - неколико зомбија су безопасни. Међутим, постоји неколико начина на које се можете ослободити зомби процеса.
Један од начина је слање СИГЦХЛД сигнала родитељском процесу. Овај сигнал говори родитељском процесу да изврши цалл (чекање) системски позив и очисти своју зомби децу. Пошаљите сигнал са убити цомманд, реплацемент пид у команди испод са ПИД надређеног процеса:
килл -с СИГЦХЛД пид
Међутим, ако родитељски процес није правилно програмиран и игнорише СИГЦХЛД сигнале, то неће помоћи. Мораћете да убијете или затворите родитељски процес зомбија. Када се процес који је створио зомбије заврши, инит насљеђује зомби процесе и постаје њихов нови родитељ. (инит је први процес који је започео на Линук-у при покретању и додијељен му је ПИД 1.) инит повремено извршава цалл () чекање () системски позив за чишћење својих зомби дјеце, тако да ће инит направити кратки рад зомбија. Можете га поново покренути након затварања.
Ако родитељски процес настави са стварањем зомбија, требало би га поправити тако да исправно позове ваит () да пожање своје зомби дјецу. Поднесите извештај о грешци ако програм на вашем систему стално ствара зомбије.