Основы ведь и так есть в хендбуке, а тонкости всё равно всё забудутся, и придётся каждый раз подсматривать, пока не наступит просветление. А для этих целей лучше какой-нибудь небольшой cheatsheet подойдёт…
добавлю крупицу инфы.
Существует понятие — zombie-process. Это процесс порожденный другим процессом, и уже остановленный. Все что в нем сохранилось — лишь информация о коде возврата, и еще несколько системных значений. Система будет хранить зомби-процесс до тех пор пока родительский процесс не вызовет wait() или же пока сам родитель не завершится.
Классической ошибкой программиста будет в данном случае создание процессов exec() без последующего вызова wait()- так как в этом случае ваше приложение будет постоянно плодить новых и новых зомби.
Решением проблемы станет вызов wait/waitpid или же использование сигнала:
signal(SIGCLD, SIG_IGN);
этот код, вызванный до создания новых процессов, приведет к автоматическому удалению зомби ( и если вам не нужно считывать информацию о завершившихся порожденных процессах — это будет самое простое решение ).
Разве init не наследует зомби с целью получить их код? ИМХО вы цитируете какую-то древнюю книжку по юниксам; я ни разу не видел «орд зомби» под линуксом, какие бы неприличности там не творились.
А уж сколько forc'ов я лично делал без получения кода… И никаких проблем.
насчет древней книжки не знаю, у меня такое случилось буквально вчера на живом примере, когда после проги осталось 200 зомбей, процессов которые она вызывала через fork() exec() и без последующего wait(). Вылечилось как написал выше.
может дело в том что ваша программа завершалась после всех «безобразий» а моя работала долго, и все зомби естественно жили только пока она была жива.
Именно. В виндах такого понятия нет, так что мигрирующим приходится долго осознавать такую простую вещь — программу можно «остановить», а потом «продолжить». Очень удобно, если есть какие-то подозрения относительно программы. Остановил, изучил, продолжил.
Есть еще pstree, но он отображает значительно меньше информации.
pstree -p — отобразить дерево процессов с принадлежащими pid;
pstree -u — отобразить дерево процессов с принадлежащими uid;
pstree -pu — отобразить дерево процессов с pid и uid.
Основы Linux от основателя Gentoo. Часть 2 (3/5): Управление процессами