Зомби и сиротские процессы в C
Предпосылка: 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, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.