Pré-requisito: fork() em C

Processo Zumbi:
Um processo que concluiu a execução, mas ainda tem entrada na tabela de processos para relatar a seu processo pai, é conhecido como processo zumbi. Um processo filho sempre se torna um zumbi antes de ser removido da tabela de processos. O processo pai lê o status de saída do processo filho que colhe a entrada do processo filho da tabela de processos.

No código a seguir, o filho termina sua execução usando a chamada de sistema exit() enquanto o pai dorme por 50 segundos, portanto, não chama wait() e a entrada do processo filho ainda existe na tabela de processos.

// A C 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;
}

Observe que o código acima pode não funcionar com o compilador online, pois fork() está desabilitado.

 

Processo órfão:
Um processo cujo processo pai não existe mais, ou seja, concluído ou encerrado sem esperar que seu processo filho termine, é chamado de processo órfão.

No código a seguir, pai termina a execução e sai enquanto o processo filho ainda está em execução e agora é chamado de processo órfão.

No entanto, o processo órfão é logo adotado pelo processo init, uma vez que seu processo pai morre.

// A C 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;
}

Observe que o código acima pode não funcionar com compiladores online, pois fork() está desabilitado.

Relacionado:
Alguma idéia O que são zumbis no sistema operacional?
Processos zumbis e sua prevenção

Este artigo foi contribuído por Pranjal Mathur . Se você gosta do GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo e enviá-lo para contrib@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.

Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima

Quer aprender com os melhores vídeos com curadoria e problemas práticos, confira o C++ Foundation Course for Basic to Advanced C++ e C++ STL Course for Foundation plus STL. Para completar sua preparação desde o aprendizado de um idioma até o DS Algo e muitos mais, consulte o Curso Completo de Preparação para Entrevistas .