Титла: Програма за убиване на зомбирани процеси Публикувано от: Apache в Oct 23, 2005, 00:36 Здравейте, трябва ми някоя програма за убиване на зомбирани процеси под Gentoo. Ако някой се сеща, моля да ми каже. Мерси предварително !
Титла: Програма за убиване на зомбирани процеси Публикувано от: loxs в Oct 23, 2005, 00:41 Хех, там нямате ли top?... или kill, killall... ?
Титла: Програма за убиване на зомбирани процеси Публикувано от: Apache в Oct 23, 2005, 01:04 Говоря за някакъв скрипт, който постоянно да следи.
Титла: Програма за убиване на зомбирани процеси Публикувано от: romeo_ninov в Oct 23, 2005, 07:32
Най-общо казано зомиран процес не може да бъде убит, защото той е в процес на спиране. единствения начи е рестарт на машината! Титла: Програма за убиване на зомбирани процеси Публикувано от: aaaaaa в Oct 23, 2005, 08:02 И аз с това впечатление останах. За около 6 месеца ползване на убунту два пъти ми се случи процеси да останат зомбирани за дълго време и се отървах като рестартирах.
Титла: Програма за убиване на зомбирани процеси Публикувано от: loxs в Oct 23, 2005, 09:14 Хъх... в единствения случай, когато имах такъв процес си го у трепах през топ като едното нищо
![]() Титла: Програма за убиване на зомбирани процеси Публикувано от: romeo_ninov в Oct 23, 2005, 10:12
Поне в света на Юникс зомби процес се получава при спиране на процес с някакъв сигнал и след това изпоращане към него на друг сигнал. В такъв случай някои от приложенията изпадат в неопределено състояние от което няма излизане. Заема се малко памет за файлов указател (и евентуално алокирана от процеса памет) и процесорно време (малко) за разпознаване на процеса като зомби и преминаване нататък по кръга от процеси. АКо броя на процесите-зомби е голям е препоръчително да се рестартира машината заради възможни проблеми с производителността (говорим за десетки и стотици). В твоя случай вероятно си имал късмет или процеса не е бил изцяло зомби Титла: Програма за убиване на зомбирани процеси Публикувано от: danchev в Oct 23, 2005, 11:24 Чета аз и на очите си не вярвам ... как може да падне качеството на коментарите тук до такова ниво.
Зомби (zombie) процеси в Юникс са дъщерни процеси които са приключили своята работа и са уведомили ядрото за това, обаче техния родител(и) (който в момента изпълнява wait() или waitpid() или + нещо подобно) не се е погрижил все още да им вземе exit status-а от ядрото. Зомби процесите НЕ заемат никакър ресурс освен PID ентри, което ядрото не може да освободи защото само чрез него евентуално родителя ще поиска (някога ако въобще ще) exit status-а на детето. Зомби процес се убива (освобождава PID-a) като се убие неговия родител със сигнал (-15 най-културно, -9 най-грубо, ще ги видите). Ако и родителя exit()-не без да е взел exit() статуса на децата си то работа на процеса init е да wait()-ва такива зомби процеси, така, че можете да пратите и HUP до init, не можете да го убиете защото той е пуснат от ядрото нищо че е зачислен на root. Рестартиране на системата е силно безмислено... най-малко пък заради производителността. Смех. За домашно: разберете какво е orphan process (сирак). Титла: Програма за убиване на зомбирани процеси Публикувано от: loxs в Oct 23, 2005, 11:37 Ами и аз имах горе-долу същата представа за нещата... и затова ми беше доста странно защо тази тема предизвиква такава паника
![]() А за сираците... знам само че са нещо лошо... ама сегичка ще се поразровя из уикипедия. Титла: Програма за убиване на зомбирани процеси Публикувано от: divak в Oct 23, 2005, 18:26 Всеки процес в *NIX има "потребителска"(когато се изпълнява програмата) и "системна"(когато след системно извикване или прекъсване се изпълнява процедура на ядрото) фаза, като двете фази на процеса се не се изпълняват едновременно, а строго последователно(системната е продължение на потребителската).Системното извикване "fork" създава нов процес със състояние "initial". След пълното му създаване процесът преминава в състояние на готовност .Ако готов процес бъде избран за изпълнение, извиква се процедурата "switch", която предава управлението на процеса, който започва да се изпълнява в режим на ядрото"kernel running". По-нанатък действията зависят от предишните състояния на процеса.Ако процесът е новосъздаден или е потребителски, веднага минава в състояние "user running" и се изпълнява в потребителски режим.Ако по време на изпълнение на системно извикване процесът е бил блокиран поради липса на ресърс,въстановява се изпълнението на извикването в "kernel running".Когато се изпълнява в потребителски режим , процес може да премине в "kernel running" при прекъсване или иницииране на системно извикване и след изпълнението му да се върне обратно, като по време на системното извикване е възможно той да трябва да ресурс или събитие (това се извършва със извикване на процедурата "sleep", която поставя процеса в опашка от "спящи" процеси и състояние "asleep", когато ресурсът се освободи или събитието настъпи , ядрото"събужда" процеса със "wakeup" ).
Процес може да бъде преустановен със сигнал "stop"(SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU). Сигнала променя веднага състоянието на процеса , в зависимост от текущото състояние той преминава в състояние "stopped" или "asleep". Състоянието на процеса може да се възобнови чрез сигнал "continue"(SIGCONT), който го връща в състояние "ready to run" или "asslep". И накрая, когато процес завърши изпълнението си чрез извикване на "exit" (или получаване на сигнал), ядрото освобождава ресурсите му (с изключение на статуса и данните за използваните ресурси) и го поставя "zombie". Процесът остава в това състояние, докато родителят му не извика системно извикване "wait"(waitpid), което унищожава процеса и връща статуса му на родителя. Извинявам се че почнах толкова от далеко ![]() ![]() Титла: Програма за убиване на зомбирани процеси Публикувано от: divak в Oct 23, 2005, 18:36 А за въпроса със скрипта, то той би трябвало да е нещо то сорта:
1.чете таблицата със процесите 2.проверява във EVENT за процес със флаг Z 3.трепе процеса Или нещо подобно ![]() Например използвайки това : ps hr -Nostate,pid + малко bash цялата мъка се решава с няколко реда ![]() Титла: Програма за убиване на зомбирани процеси Публикувано от: loxs в Oct 23, 2005, 20:59 Еха, ако всички теми се развиваха така, както тази... скоро ще станем доста добри
![]() Аз ще си призная, че така и не рових да търся за сираците (към обяд излязох и се прибрах току-що. Да разбирам ли, че сирак е зомби, което не е умряло след "wait", при което родителят му губи контрол над него и след това сиракът си прави каквото си знае...? Дам, ще се ровя май ![]() Горното обаче лекичко си противоречи с едно определение от книгата "Slackware Linux Essentials" в което кратичко се казва: "A Zombie is a process whose parent has died...." В смисъл, как родителят ще му прати сигнал "wait", ако е умрял ![]() ПП: тука направо го пбърнахме на сапунен сериал... деца, родители, лели, баби... чакаме да изникне само оная, бременната, дето след 456 серии ще се разбере, че не е родила от тоя, дето никой още не знае, че ще бъде набеден за бащата ![]() Титла: Програма за убиване на зомбирани процеси Публикувано от: danchev в Oct 23, 2005, 21:24 Това дето са написали в "Slackware Linux Essentials" е пълна глупост, то там повечето неща са пълни бъркочи. Иначе е безкрайно лесно да попиташ google например...
http://www.elook.org/computing/zombie-process.htm http://www.elook.org/computing/orphan-process.htm http://en.wikipedia.org/wiki/Zombie_process http://en.wikipedia.org/wiki/Orphan_process http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?zombie+process http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?orphan+process От zombie може да стане *и* orphan, но ако е бил orphan и не е бил zombie, няма как да стане zombie после, защото init го осиновява. Това го написах още първия път де. Титла: Програма за убиване на зомбирани процеси Публикувано от: loxs в Oct 23, 2005, 21:31 Анаех си аз, че има някаква далавера
![]() Ужас, Инит забременя ![]() Благодаря за линковете, аз тъкмо се готвех да давам такива от Уикипедия ![]() Титла: Програма за убиване на зомбирани процеси Публикувано от: danchev в Oct 23, 2005, 21:40 Аааа това дето си написал "В смисъл, как родителят ще му прати сигнал "wait"" също е глупост, но си извинен защото не поучаваш хората с измислици, като някои други псевдо Юникс гурута в единични кавички, а питаш ;-) ... wait() не е сигнал, а системно извикване [1] което се изпълнява от родителя. Той може да бъде "подсетен" да си ожъне зомбиралото дете например чрез пратен му е теб сигнал
-17 SIGCHLD. man wait, waitpid, kill -l за наличните сигнали. [1] http://en.wikipedia.org/wiki/System_call Титла: Програма за убиване на зомбирани процеси Публикувано от: loxs в Oct 23, 2005, 23:42 Знам, знам, неведнъж съм си омазвал системата с игрички с kill i top
![]() Титла: Програма за убиване на зомбирани процеси Публикувано от: divak в Oct 24, 2005, 00:28 Ето малко зомби (безвредно) за тренировка
ако незастреляш Parent процеса няма отърване ![]() Титла: Програма за убиване на зомбирани процеси Публикувано от: mlinux_gada в Nov 23, 2005, 13:40 Linux се рестартира само когато се СЛАГА,МАХА,ДОБАВЯ хардуер...Или за слагане на нов kernel,ако е прекалено наложително
![]() ![]() ![]() |