Нередко из-за отсутствия обработчика сигнала SIGCHLD в родительском процессе,
после завершения дочерней программы, остаются "<defunct>" или zombie процессы.
Zombie процессы не занимают системные ресурсы, кроме записи в таблице процессов,
что может вызвать ее переполнение и как следствие блокировку запуска новых процессов,
при большой интенсивности появления zombie. Zombie исчезают после завершения работы
родительского процесса, но записи в таблице также можно очистить принудительным путем.Получаем список zombie процессов:
ps -ecl |grep "Z"
F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME CMD
0 Z 100 27841 27840 - 0 - 0 - ? 0:00 <defunct>"kill" и "kill -9" в случае zombie использовать бесполезно. В Solaris для эмуляции вызова wait()
для чтения кода возврата из таблицы процессов существует утилита preap:preap 27841
27841: exited with status 0
URL: http://www.c0t0d0s0.org/archives/4778-Less-known-Solaris-fea...
Обсуждается: http://www.opennet.me/tips/info/1750.shtml
Круто.
А такое решение аргументировано чем-то или просто было лень автоматизировать эту процедуру, что во всех юниксах уже давно сделано?
>Круто.
>А такое решение аргументировано чем-то или просто было лень автоматизировать эту процедуру,
>что во всех юниксах уже давно сделано?простите, ЧТО в юниксах автоматизировано?
>>Круто.
>>А такое решение аргументировано чем-то или просто было лень автоматизировать эту процедуру,
>>что во всех юниксах уже давно сделано?
>
>простите, ЧТО в юниксах автоматизировано?убийство зомби по крону, наверно ;)
>>>Круто.
>>>А такое решение аргументировано чем-то или просто было лень автоматизировать эту процедуру,
>>>что во всех юниксах уже давно сделано?
>>
>>простите, ЧТО в юниксах автоматизировано?
>
>убийство зомби по крону, наверно ;)а... ну возможно... нам, гагарам, недоступно...
>>простите, ЧТО в юниксах автоматизировано?пардон, невнимательно прочитал новость. я думал в солярке зомби иниту не отдаётся после завершения родителя. тут другой случай
Зомби-процессы остаются неуничтоженными потому, что их родитель может затребовать код завершения ребёнка. В данном случае админу предоставлена возможность уничтожать зомби досрочно.Ещё зомби уничтожаются при завершении их родителя - в этом случае детей погибшего усыновляет init, а он старательно чистит зомби.
Ваш линукс - это не юникс.
>Ваш линукс - это не юникс....что пожалуй, к лучшему.А то юниксы что-то склонны дохнуть 1 за другим.А которые не сдохли напоминают зомбяков - ходячие мертвецы какие-то и есть в основном :)
на preap модно вешать симлинк shotgun :)
Очень полезно.
А как в Линуксе такое же делается, кто подскажет?
>Очень полезно.
>А как в Линуксе такое же делается, кто подскажет?http://ru.wikibooks.org/wiki/LOR-FAQ-Admin#.D0.9A.D0.B0.D0.B...
"
В состоянии "зомби" процесс не имеет образа в RAM, но информация о нём сохраняется в таблице процессов. Он не поедает ресурсы, но теоретически могут кончится PID'ы.Напрямую зомби не убить, нужно уничтожить родительский процесс, тогда зомби умрет вместе с ним.
Увидеть родителя можно в столбце PPID после команды
ps -axl
Подробнее: http://cad.narod.ru/methods/os_unix/unibas/process.html
"
>>Очень полезно.
>>А как в Линуксе такое же делается, кто подскажет?...
>Подробнее: http://cad.narod.ru/methods/os_unix/unibas/process.htmlСтоит только добавить что если интересует как оно в *линуксе* - эту доку лучше не читать.Потому что там про юниксы.И совпадает с действительностью соответственно лишь местами.
>>Очень полезно.
>>А как в Линуксе такое же делается, кто подскажет?
>
>http://ru.wikibooks.org/wiki/LOR-FAQ-Admin#.D0.9A.D0.B0.D0.B...
> ...Не, ну я же не совсем дурак, это я так все прекрасно знаю.
Я спрашиваю как сделать такой финт ушами как в Солрке, и все-таки убить зомби, без убийства родителя...
>знаю.
>Я спрашиваю как сделать такой финт ушами как в Солрке, и все-таки
>убить зомби, без убийства родителя...сказать родителю:
killall -s CHLD
??
>сказать родителю:
>killall -s CHLD
>??Неа, не помогает, ни
kill -s SIGCHLD pid
ни
kill -s CHLD pid
Все бональней!
РОДИТЕЛЯ В РЕСТАРЕ$ sudo /etc/init.d/ssh restart
и все зомби от sshd как рукой снимет.
> Все бональней!
> РОДИТЕЛЯ В РЕСТАРЕ
> $ sudo /etc/init.d/ssh restart
> и все зомби от sshd как рукой снимет.Кэп?
> Неа, не помогает, ни
> kill -s SIGCHLD pid
> ни
> kill -s CHLD pidВсё верно...система уведомила процесс-родитель ещё при завершении процесса, превратившегося в зомби. Проблема в том, что некоторые процессы SIGCHLD попросту игнорируют.