Hablando del proceso zombie y el proceso huérfano

1. Proceso zombi

Definición: Un proceso zombie es un proceso hijo que finaliza antes que el proceso padre. En este momento, el proceso hijo no se recicla y los recursos ocupados por el proceso hijo se liberan. En este momento, el proceso hijo se denomina proceso zombie. y el nombre extranjero del zombie es zombie, por lo que el proceso zombie está en el estado de Linux denominado Z,
si el proceso principal termina en este momento, el proceso de inicio se hará cargo automáticamente del proceso secundario y recogerá el cadáver. y todavía se puede borrar. Pero si el proceso padre es un bucle y no termina, el proceso hijo siempre permanecerá en estado zombi.

Inserte la descripción de la imagen aquí

La realización del proceso zombie

  1. Para lograr el proceso zombie, solo necesitamos crear dos procesos en el código, dejar que el proceso hijo salga y el proceso padre genera un ciclo de salida para lograr el objetivo.
#include<stdio.h>
#include<unistd.h>
int main()
{
    
    
  pid_t ret=fork();//创建子进程
  if(ret<0)
  {
    
    
    return 0;
  }
  else if(ret==0)
  {
    
    

    printf("I am child,pid is:%d\n",getpid());
    printf("My father pid is:%d\n",getppid());
  }
  else 
  {
    
    
    while(1)
    {
    
    
      printf("I am father,pid is %d\n",getpid());
      printf("My father pid is:%d\n",getppid());
      sleep(1);
    }
  }
  return 0;
}

Después de dejar que el programa se ejecute, analizamos el proceso padre-hijo:

1. El PID del proceso padre es: 20518
2. El PID del proceso hijo es: 20520

Inserte la descripción de la imagen aquí

Usamos el comando ps aux | grep main para ver la información del proceso padre y el proceso hijo, y encontraremos que el proceso hijo se ha convertido en Z

El daño de los procesos zombies.

  1. Los procesos zombies ocuparán los recursos del sistema. Si hay muchos procesos zombies, no habrá números de proceso disponibles y el sistema no podrá crear nuevos procesos.

Cómo lidiar con los procesos zombies

Utilice el comando kill -9 [pid]

Proceso huérfano

Un proceso principal sale y uno o más de sus procesos secundarios aún se están ejecutando, entonces esos procesos secundarios se convertirán en procesos huérfanos. El proceso de huérfano será adoptado por el proceso de inicio (el número de proceso es 1), y el proceso de inicio completará el trabajo de recopilación de estado para ellos. Un proceso huérfano es un proceso sin un proceso padre. Siempre que aparece un proceso huérfano, el kernel establece el proceso padre del proceso huérfano en init, y el proceso init esperará cíclicamente () a sus procesos hijos que han salido. De esta manera, cuando un proceso huérfano termina de manera sombría su ciclo de vida, el proceso init manejará todo su trabajo posterior en nombre del partido y el gobierno. Entonces el proceso huérfano no es dañino

Cree un proceso huérfano: deje que el proceso hijo caiga en un bucle, el proceso padre sale primero

#include<stdio.h>
#include<unistd.h>
int main()
{
    
    
  pid_t ret=fork();
  if(ret<0)
  {
    
    
    return 0;
  }
  else if(ret==0)
  {
    
    
    while(1)
    {
    
    
      printf("I am child,pid is:%d\n",getpid());
      printf("my father pid is:%d\n",getppid());
      sleep(1);
    }
  }
  else 
  {
    
    
    printf("I am father,pid is:%d\n",getpid());
    printf("my father pid is:%d\n",getppid());
  }
  return 0;
}

Inserte la descripción de la imagen aquí
Podemos ver que este proceso huérfano ha sido adoptado por Process One.

Supongo que te gusta

Origin blog.csdn.net/ahuyccc/article/details/115305397
Recomendado
Clasificación