Зомби-процесс вызывает нехватку памяти? Это убивает процесс инициализации в конце концов?
У меня проблема с процессом зомби, и я впервые встретился с ним. Поэтому я не знаю, как решить эту проблему и концепцию. Я прочитал статью, опубликованную 1 год назад ( ссылка), и сказал, как показано ниже:
Нет ничего плохого в том, чтобы позволить таким процессам быть, если их не много. Зомби в конце концов пожинается его родителем (вызывая wait(2)). Если исходный родитель не получил его до своего выхода, процесс init (pid == 1) сделает это позже.
Но при этом я не понимаю и у меня есть 2 вопроса. Пожалуйста, помогите на тот, кто знает это.
- Значит ли это, что со временем запись процесса зомби будет удалена из таблицы процессов и успешно уничтожена процессом init (
Pid = 1
)?? - Я думаю, что процесс зомби вызывает проблему нехватки памяти, потому что он не возвращает выделенное пространство памяти.
Я прав??
2 ответа
Зомби-процессы не используют никаких системных ресурсов. (На самом деле каждый использует очень маленький объем системной памяти для хранения своего дескриптора процесса.) Однако каждый процесс-зомби сохраняет свой идентификатор процесса (PID).
Системы Linux имеют конечное число идентификаторов процессов - 32767 по умолчанию в 32-разрядных системах. Если зомби накапливаются с очень высокой скоростью - например, если неправильно запрограммированное серверное программное обеспечение создает процессы зомби под нагрузкой - весь пул доступных PID будет в конечном итоге назначен процессам зомби, предотвращая запуск других процессов.
Избавляемся от зомби-процессов
kill -s SIGCHLD pid
Кредит идет на: HTG
Нет, на самом деле процесс зомби
В терминологии UNIX System, процесс, который завершился, но родитель которого еще не ожидал этого, называется зомби. Команда ps(1) печатает состояние процесса зомби как Z. Если мы напишем долго выполняющуюся программу, которая разветвляет много дочерних процессов, они становятся зомби, если мы не ждем их и не получаем их статус завершения.
И последнее условие, которое следует рассмотреть: что происходит, когда процесс, унаследованный init, завершается? Это становится зомби? Ответ "нет", потому что init написан так, что всякий раз, когда один из его дочерних элементов завершается, init вызывает одну из функций ожидания, чтобы получить статус завершения. Таким образом, init предотвращает засорение системы зомби. Когда мы говорим "один из потомков init", мы имеем в виду либо процесс, который init генерирует напрямую (например, getty, который мы описываем в разделе 9.2), либо процесс, чей родительский объект завершен и впоследствии унаследован init. от Advance Unix Программирование Стивенсом Речардом