Procesos zombies y huérfanos en C

Requisito previo: fork() en C

Proceso zombi:

Un proceso que ha finalizado la ejecución pero aún tiene una entrada en la tabla de procesos para informar a su proceso principal se conoce como proceso zombi. Un proceso hijo siempre se convierte primero en un zombi antes de ser eliminado de la tabla de procesos. El proceso principal lee el estado de salida del proceso secundario que extrae la entrada del proceso secundario de la tabla de procesos.

En el siguiente código, el hijo finaliza su ejecución usando la llamada al sistema exit() mientras el padre duerme durante 50 segundos, por lo tanto, no llama a wait() y la entrada del proceso hijo aún existe en la tabla de procesos.

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

Tenga en cuenta que el código anterior puede no funcionar con el compilador en línea ya que fork() está deshabilitado.

 

Proceso huérfano:

Un proceso cuyo proceso principal ya no existe, es decir, finalizó o finalizó sin esperar a que finalice su proceso secundario, se denomina proceso huérfano.

En el siguiente código, el padre finaliza la ejecución y sale mientras el proceso hijo todavía se está ejecutando y ahora se llama un proceso huérfano.

Sin embargo, el proceso huérfano pronto es adoptado por el proceso init, una vez que muere su proceso padre.

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

Tenga en cuenta que el código anterior puede no funcionar con compiladores en línea ya que fork() está deshabilitado.

Relacionado:
¿Alguna idea de qué son los zombis en el sistema operativo?
Procesos Zombie y su Prevención

Este artículo es una contribución de Pranjal Mathur . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo y enviarlo por correo a contribuir@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *