Книга: Программирование для Linux. Профессиональный подход
Листинг 3.6. (zombie.c) Создание процесса-зомби
Листинг 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
автоматически удаляет все унаследованные им дочерние процессы-зомби.
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Сущность процесса миграции
- Создание файлов с блокировкой
- V Совершенствование процесса
- Создание свободно позиционируемых элементов
- Использование сервера Yaffil внутри процесса
- 12. Лекция: Создание приложений с графическим интерфейсом пользователя.
- Создание объектов Collection
- 7.4.2.4. Создание своего первого LiveCD
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- 7.4.2. Создание собственного LiveCD
- Создание пользователя и группы на рабочей станции