Зомби и сиротские процессы в C

Опубликовано: 1 Января, 2022

Предпосылка: fork () в C

Зомби-процесс:

Процесс, который завершил выполнение, но все еще имеет запись в таблице процессов, чтобы сообщить об этом своему родительскому процессу, известен как процесс-зомби. Дочерний процесс всегда сначала становится зомби, а затем удаляется из таблицы процессов. Родительский процесс считывает статус выхода дочернего процесса, который извлекает запись дочернего процесса из таблицы процессов.

В следующем коде дочерний процесс завершает свое выполнение с помощью системного вызова exit (), в то время как родитель спит в течение 50 секунд, следовательно, не вызывает wait (), а запись дочернего процесса все еще существует в таблице процессов.

// AC program to demonstrate Zombie Process.
// Child becomes Zombie as parent is sleeping
// when child process exits.
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
// Fork returns process id
// in parent process
pid_t child_pid = fork();
// Parent process
if (child_pid > 0)
sleep(50);
// Child process
else
exit (0);
return 0;
}

Обратите внимание, что приведенный выше код может не работать с онлайн-компилятором, поскольку fork () отключен.


Сиротский процесс:

Процесс, родительский процесс которого больше не существует, т.е. либо завершился, либо завершился, не дожидаясь завершения дочернего процесса, называется процессом-сиротой.

В следующем коде родительский процесс завершает выполнение и завершает работу, в то время как дочерний процесс все еще выполняется и теперь называется сиротским процессом.

Однако процесс-сирота вскоре будет принят процессом init, как только его родительский процесс умирает.

// AC program to demonstrate Orphan Process.
// Parent process finishes execution while the
// child process is running. The child process
// becomes orphan.
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
// Create a child process
int pid = fork();
if (pid > 0)
printf ( "in parent process" );
// Note that pid is 0 in child process
// and negative if fork() fails
else if (pid == 0)
{
sleep(30);
printf ( "in child process" );
}
return 0;
}

Обратите внимание, что приведенный выше код может не работать с онлайн-компиляторами, поскольку fork () отключен.

Связанный :
Есть идеи, что такое зомби в операционной системе?
Зомби-процессы и их предотвращение

Эта статья пополняемая Pranjal Матур Если вы любите GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью и отправить свою статью contribute@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++ C