Зомби TV

3.4.3. Процессы-зомби

Если дочерний процесс завершается в то время, когда родительский процесс заблокирован функцией wait(), он успешно удаляется и его код завершения передается предку через функцию wait(). Но что произойдет, если потомок завершился, а родительский процесс так и не вызвал функцию wait()? Дочерний процесс просто исчезнет? Нет, ведь в этом случае информация о его завершении (было ли оно аварийным или нет и каков код завершения) пропадет. Вместо этого дочерний процесс становится процессом-зомби.

Зомби — это процесс, который завершился, но не был удален. Удаление зомби возлагается на родительский процесс. Функция wait() тоже это делает, поэтому перед ее вызовом не нужно проверять, продолжает ли выполняться требуемый дочерний процесс. Предположим, к примеру, что программа создает дочерний процесс, выполняет нужные вычисления и затем вызывает функцию wait(). Если к тому времени дочерний процесс еще не завершился, функция wait() заблокирует программу. В противном случае процесс на некоторое время превратится в зомби. Тогда функция wait() извлечет код его завершения, система удалит процесс и функция немедленно завершится.

Что же всё-таки случится, если родительский процесс не удалит своих потомков? Они останутся в системе в виде зомби. Программа, показанная в листинге 3.6, порождает дочерний процесс, который немедленно завершается, тогда как родительский процесс берет минутную паузу, после чего тоже заканчивает работу, так и не позаботившись об удалении потомка.

Листинг 3.6. (zombie.c) Создание процесса-зомби

#include «stdlib.h>

#include <sys/types.h>

#include <unistd.h>

int main() {

pid_t child_pid;

/* Создание дочернего процесса. */

child_pid = fork();

if (child_pid > 0) {

/* Это родительский процесс — делаем минутную паузу. */

sleep(60);

} else {

/* Это дочерний процесс — немедленно завершаем работу. */

exit(0);

}

return 0;

}

Скомпилируйте этот файл и запустите программу. Пока программа работает, перейдите в другое окно и просмотрите список процессов с помощью следующей команды:

% ps -е -o pid,ppid,stat,cmd

Эта команда отображает идентификатор самого процесса и его предка, а также статус процесса и его командную строку. Обратите внимание на присутствие двух процессов с именем zombie. Один из них — предок, другой — потомок. У последнего идентификатор родительского процесса равен идентификатору основного процесса zombie, при этом потомок обозначен как <defunct> (несуществующий), а его код состояния равен Z (т.е. zombie — зомби).

Итак, мы хотим узнать, что будет, когда программа zombie завершится, не вызвав функцию wait(). Останется ли процесс-зомби? Нет — выполните команду ps и убедитесь в этом: оба процесса zombie исчезли. Дело в том, что после завершения программы управление ее дочерними процессами принимает на себя специальный процесс — демон init, который всегда работает, имея идентификатор 1 (это первый процесс, запускаемый при загрузке Linux). Демон init автоматически удаляет все унаследованные им дочерние процессы-зомби.

Поделитесь на страничке

Следующая глава >

Шляпа зомби — отличное качество и выгодные цены на Joom

— Шляпа зомби в наличии по цене от 259 руб

— В каталоге Joom более 10000 товаров с фото и отзывами покупателей

— Шляпа зомби в интернет- магазине Joom с доставкой в любую точку мира.

Наши преимущества

— Шляпа зомби всегда в наличии по цене от 259 руб.

— Более 10000 товаров.

⭐Быстрая и бесплатная доставка по всему миру

Мы даем продавцам ограниченное количество календарных дней, чтобы отправить шляпа зомби. Доставка всех товаров абсолютно бесплатна.

⭐Легкий и быстрый возврат

Если вам пришел некачественный товар, обратитесь в службу поддержки Joom! Мы рассмотрим вашу заявку и примем решение о частичном или полном возврате средств.

💡 Как купить шляпа зомби?

— Выберите товар. Укажите его вариант (цвет, размер, комплектацию) из представленных продавцом.

— Нажмите на кнопку «Купить», чтобы положить товар в корзину и перейти к оформлению.

— В корзине выберите количество единиц товара. (По умолчанию — 1. Максимум — 20).

— Введите полный адрес доставки (включая индекс и номер квартиры), личные данные, номер, адрес вашей электронной почты. Проверьте введенные данные и подтвердите их.

— Оплатите заказ любым удобным для вас способом.

💡 Сколько стоит доставка?

Доставка зарубежных товаров всегда бесплатна, однако ваша посылка может облагаться НДС, таможенными пошлинами или налоговыми сборами в зависимости от законодательства страны, в которой вы живете.

Если вы не уверены, будут ли с вас взиматься дополнительные расходы или нет, свяжитесь, пожалуйста, со справочной таможенной службы вашей страны.

💡 Как я могу оплатить шляпа зомби?

✔️ Банковской картой (Visa, MasterCard, Maestro, Мир и др.);

✔️ Картой Совесть, Свобода или Халва; через аккаунт Paypal;

✔️ Через QIWI кошелек; через кошелек Яндекс.Деньги;

✔️ Через Google Pay и Apple Pay; баллами.

❗Оплата со счета мобильного телефона и оплата наложенным платежом сейчас не принимаются.

Вам не стоит беспокоиться за сохранность платежных данных- совершать покупки с Joom не только просто, но и безопасно. Мы позаботились о том, чтобы вся информация, которая передается через Joom, была зашифрована и надежно защищена.