Автор Тема: Програма за убиване на зомбирани процеси  (Прочетена 3392 пъти)

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Здравейте, трябва ми някоя програма за убиване на зомбирани процеси под Gentoo. Ако някой се сеща, моля да ми каже. Мерси предварително !
Активен

loxs

  • Напреднали
  • *****
  • Публикации: 307
    • Профил
Хех, там нямате ли top?... или kill, killall... ?
Активен

Linux is like a wigwam - no windows, no gates, apache inside!
We shall walk together through all eternity. Wandering in the shadows, spreading the fear!
Gentoo - Baselayout 1.12.9-r2
Linux 2.6.21-suspend2-r6 Mon Jun 25 17:48:08 EEST 2007

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Говоря за някакъв скрипт, който постоянно да следи.
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Цитат (Apache @ Окт. 23 2005,01:36)
Здравейте, трябва ми някоя програма за убиване на зомбирани процеси под Gentoo. Ако някой се сеща, моля да ми каже. Мерси предварително !

Най-общо казано зомиран процес не може да бъде убит, защото той е в процес на спиране. единствения начи е рестарт на машината!
Активен

0x2B|~0x2B

aaaaaa

  • Напреднали
  • *****
  • Публикации: 971
    • Профил
И аз с това впечатление останах. За около 6 месеца ползване на убунту два пъти ми се случи процеси да останат зомбирани за дълго време и се отървах като рестартирах.
Активен

...to boldly go where no one has gone before...

loxs

  • Напреднали
  • *****
  • Публикации: 307
    • Профил
Хъх... в единствения случай, когато имах такъв процес си го у трепах през топ като едното нищо  '<img'>
Активен

Linux is like a wigwam - no windows, no gates, apache inside!
We shall walk together through all eternity. Wandering in the shadows, spreading the fear!
Gentoo - Baselayout 1.12.9-r2
Linux 2.6.21-suspend2-r6 Mon Jun 25 17:48:08 EEST 2007

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Цитат (loxs @ Окт. 23 2005,10:14)
Хъх... в единствения случай, когато имах такъв процес си го у трепах през топ като едното нищо  '<img'>

Поне в света на Юникс зомби процес се получава при спиране на процес с някакъв сигнал и след това изпоращане към него на друг сигнал. В такъв случай някои от приложенията изпадат в неопределено състояние от което няма излизане. Заема се малко памет за файлов указател (и евентуално алокирана от процеса памет) и процесорно време (малко) за разпознаване на процеса като зомби и преминаване нататък по кръга от процеси. АКо броя на процесите-зомби е голям е препоръчително да се рестартира машината заради възможни проблеми с производителността (говорим за десетки и стотици). В твоя случай вероятно си имал късмет или процеса не е бил изцяло зомби
Активен

0x2B|~0x2B

danchev

  • Напреднали
  • *****
  • Публикации: 16
    • Профил
Чета аз и на очите си не вярвам ... как може да падне качеството на коментарите тук до такова ниво.

Зомби (zombie) процеси в Юникс са дъщерни процеси които са приключили своята работа и са уведомили ядрото за това, обаче техния родител(и) (който в момента изпълнява wait() или waitpid() или + нещо подобно) не се е погрижил все още да им вземе exit status-а от ядрото. Зомби процесите НЕ заемат никакър ресурс освен PID ентри, което ядрото не може да освободи защото само чрез него евентуално родителя ще поиска (някога ако въобще ще) exit status-а на детето. Зомби процес се убива (освобождава PID-a) като се убие неговия родител със сигнал (-15 най-културно, -9 най-грубо, ще ги видите). Ако и родителя exit()-не без да е взел exit() статуса на децата си то работа на процеса init е да wait()-ва такива зомби процеси, така, че можете да пратите и HUP до init, не можете да го убиете защото той е пуснат от ядрото нищо че е зачислен на root. Рестартиране на системата е силно безмислено... най-малко пък заради производителността. Смех.

За домашно: разберете какво е orphan process (сирак).
Активен

loxs

  • Напреднали
  • *****
  • Публикации: 307
    • Профил
Ами и аз имах горе-долу същата представа за нещата... и затова ми беше доста странно защо тази тема предизвиква такава паника '<img'>

А за сираците... знам само че са нещо лошо... ама сегичка ще се поразровя из уикипедия.
Активен

Linux is like a wigwam - no windows, no gates, apache inside!
We shall walk together through all eternity. Wandering in the shadows, spreading the fear!
Gentoo - Baselayout 1.12.9-r2
Linux 2.6.21-suspend2-r6 Mon Jun 25 17:48:08 EEST 2007

divak

  • Напреднали
  • *****
  • Публикации: 830
    • Профил
Всеки процес в *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), което унищожава процеса и връща статуса му на родителя.

Извинявам се че почнах толкова от далеко  '<img'>   Мисля че отговора на домашното е някъде там  '<img'>
Активен

divak

  • Напреднали
  • *****
  • Публикации: 830
    • Профил
Програма за убиване на зомбирани процеси
« Отговор #10 -: Oct 23, 2005, 18:36 »
А за въпроса със скрипта, то той би трябвало да е нещо то сорта:
1.чете таблицата със процесите
2.проверява във EVENT за процес със флаг Z
3.трепе процеса
Или нещо подобно  '<img'>

Например използвайки това : ps hr -Nostate,pid + малко bash цялата мъка се решава с няколко реда  '<img'>
Активен

loxs

  • Напреднали
  • *****
  • Публикации: 307
    • Профил
Програма за убиване на зомбирани процеси
« Отговор #11 -: Oct 23, 2005, 20:59 »
Еха, ако всички теми се развиваха така, както тази... скоро ще станем доста добри '<img'>
Аз ще си призная, че така и не рових да търся за сираците (към обяд излязох и се прибрах току-що.

Да разбирам ли, че сирак е зомби, което не е умряло след "wait", при което родителят му губи контрол над него и след това сиракът си прави каквото си знае...? Дам, ще се ровя май '<img'>

Горното обаче лекичко си противоречи с едно определение от книгата "Slackware Linux Essentials" в което кратичко се казва: "A Zombie is a process whose parent has died...."
В смисъл, как родителят ще му прати сигнал "wait", ако е умрял '<img'>

ПП: тука направо го пбърнахме на сапунен сериал... деца, родители, лели, баби... чакаме да изникне само оная, бременната, дето след 456 серии ще се разбере, че не е родила от тоя, дето никой още не знае, че ще бъде набеден за бащата  ':p'
Активен

Linux is like a wigwam - no windows, no gates, apache inside!
We shall walk together through all eternity. Wandering in the shadows, spreading the fear!
Gentoo - Baselayout 1.12.9-r2
Linux 2.6.21-suspend2-r6 Mon Jun 25 17:48:08 EEST 2007

danchev

  • Напреднали
  • *****
  • Публикации: 16
    • Профил
Програма за убиване на зомбирани процеси
« Отговор #12 -: 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

  • Напреднали
  • *****
  • Публикации: 307
    • Профил
Програма за убиване на зомбирани процеси
« Отговор #13 -: Oct 23, 2005, 21:31 »
Анаех си аз, че има някаква далавера '<img'>
Ужас, Инит забременя  '<img'>

Благодаря за линковете, аз тъкмо се готвех да давам такива от Уикипедия '<img'>
Активен

Linux is like a wigwam - no windows, no gates, apache inside!
We shall walk together through all eternity. Wandering in the shadows, spreading the fear!
Gentoo - Baselayout 1.12.9-r2
Linux 2.6.21-suspend2-r6 Mon Jun 25 17:48:08 EEST 2007

danchev

  • Напреднали
  • *****
  • Публикации: 16
    • Профил
Програма за убиване на зомбирани процеси
« Отговор #14 -: Oct 23, 2005, 21:40 »
Аааа това дето си написал "В смисъл, как родителят ще му прати сигнал "wait"" също е глупост, но си извинен защото не поучаваш хората с измислици, като някои други псевдо Юникс гурута в единични кавички, а питаш ;-) ... wait() не е сигнал, а системно извикване [1] което се изпълнява от родителя. Той може да бъде "подсетен" да си ожъне зомбиралото дете например чрез пратен му е теб сигнал  
-17 SIGCHLD.

man wait, waitpid,
kill -l за наличните сигнали.
[1] http://en.wikipedia.org/wiki/System_call
Активен