CÓMO MADAR LOS PROCIOS DE ZOMBIE EN LINUX

Nov 25, 2024
Linux
Fatmawati Achmad Zaenuri / Shutterstock

Los programas que están mal escritos o realizados pueden irse. Procesos de zombie Acechando dentro de su computadora Linux. Averigüe cómo se crean los zombies, y cómo puede finalmente descansar.

Cómo funcionan el proceso en Linux

Linux, por supuesto, tiene que realizar un seguimiento de todas las aplicaciones y demonios que se ejecutan en su computadora. Una de las formas en que hace esto es manteniendo la tabla de procesos. Esta es una lista de estructuras en la memoria del kernel. Cada proceso tiene una entrada en esta lista que contiene alguna información al respecto.

No hay mucho en cada una de las estructuras de la tabla de procesos. Sostienen el identificacion de proceso , algunos otros elementos de datos, y un puntero al bloque de control de proceso (PCB) para ese proceso.

Es la PCB que sostiene los muchos detalles que Linux necesita buscar o establecer para cada proceso. El PCB también se actualiza a medida que se crea un proceso, dado tiempo de procesamiento y finalmente se destruye.

El PCB Linux contiene más de 95 campos. Está definido Como una estructura llamada tarea_struct.h , y es más de 700 líneas de largo. El PCB contiene los siguientes tipos de información:

  • Estado de proceso : Los estados se describen a continuación.
  • Número de procesos : Su identificador único dentro del sistema operativo.
  • Contador de programa : Cuando este proceso se le otorga el acceso a la CPU, el sistema usará esta dirección para encontrar la siguiente instrucción del proceso que debe ejecutarse.
  • Registros : La lista de registros de CPU utilizada por este proceso. La lista puede contener acumuladores, registros de índice y punteros de pila.
  • Abrir lista de archivos : Archivos asociados con este proceso.
  • Información de programación de CPU : Se utiliza para determinar con la frecuencia, y por cuánto tiempo, el tiempo de procesamiento de la CPU se otorga a este proceso. La prioridad del proceso, los punteros a las colas de programación, y otros parámetros de programación deben registrarse en la PCB.
  • Información de gestión de la memoria : Detalles sobre la memoria Este proceso está utilizando, como las direcciones de inicio y finalización de la memoria del proceso, y los punteros a las páginas de memoria.
  • Información de estado de E / S : Cualquier dispositivo de entrada o salida utilizados por el proceso.

El "Estado de proceso" puede ser cualquiera de los siguientes:

  • R: Un proceso corredor o corredor. Ejecutar significa que está recibiendo ciclos de CPU y ejecutando. Un proceso de ejecución está listo para funcionar y esperando una ranura de CPU.
  • S: Un proceso de sueño. El proceso está esperando que se complete una acción, como una operación de entrada o salida, o para que un recurso esté disponible.
  • D: El proceso está en un estado de sueño ininterrumpido. Está utilizando una llamada de sistema de bloqueo y no puede continuar hasta que las llamadas del sistema se hayan completado. A diferencia del estado "Dormir", un proceso en este estado no responderá a las señales hasta que se complete la llamada del sistema y la ejecución ha regresado al proceso.
  • T: El proceso ha terminado (detenido) porque recibió el Sigstop señal. Eso solo responderá al Sigkill o Sigcont Señales, que matan al proceso o le indican que continúen, respectivamente. Esto es lo que está pasando cuando cambias de primer plano ( fg " para antecedentes ( bg) Tareas.
  • Z: Un proceso zombie. Cuando se completa un proceso, no solo se desvanece. Libera cualquier memoria que se está utilizando y se retira de la memoria, pero queda su entrada en la tabla de procesos y PCB. Su estado se establece en Exit_zombie y su proceso padre es notificado (por el Sigchld Señal) que el proceso del niño ha terminado.

En el estado de Zombie, el proceso de los padres llama a uno de los Espere() Familias de funciones. Cuando se crea el proceso secundario. Luego espera un cambio de estado en el proceso secundario. ¿Se ha detenido el proceso secundario, continuado, o matado por una señal? ¿Ha terminado hasta la finalización natural de su código?

Si el cambio de estado es uno que significa que el proceso del niño ha dejado de funcionar, se lee su código de salida. Luego, se destruye la PCB del niño y se elimina su entrada en la tabla de procesos. Idealmente, todo esto sucede en un abrir y cerrar de ojos, y los procesos en el estado de Zombie no existen durante mucho tiempo.

RELACIONADO: Cómo ejecutar y controlar los procesos de fondo en Linux

¿Qué causa los procesos de zombie en Linux?

Un proceso padre mal escrito podría no llamar al Espere() Funciona cuando se crea el proceso secundario. Esto significa que nada está observando cambios estatales en el proceso secundario, y el Sigchld Se ignorará la señal. O, tal vez otra aplicación está afectando la ejecución del proceso principal, ya sea debido a la mala programación o la intención maliciosa.

Sin embargo, si el proceso principal no está observando cambios estatales en el proceso secundario, no se producirá la limpieza del sistema adecuado. La PCB y la entrada en la tabla de procesos no se eliminarán cuando termina el proceso secundario. Esto da como resultado que el estado zombie nunca se elimina de la PCB.

Los zombis usan un poco de memoria, pero no suele plantear un problema. La entrada en la tabla de procesos es pequeña, pero, hasta que se libera, la ID del proceso no se puede reutilizar. En un sistema operativo de 64 bits, es poco probable que cause cualquier problema porque la PCB es mucho más grande que la entrada de la tabla de procesos.

Una gran cantidad de zombies podría, posiblemente, afectar la cantidad de memoria que es gratuita para otros procesos. Sin embargo, si tiene muchos zombies, sin embargo, tiene un problema grave con la aplicación principal o un error del sistema operativo.

Cómo eliminar los procesos de zombie

No puedes matar un proceso zombie porque ya está muerto. No responderá a ninguna señal porque se ha eliminado de la memoria, no hay a dónde enviar un Sigkill señal. Puedes intentar enviar el Sigchld Señal al proceso principal, pero si no funcionó cuando terminó el proceso secundario, es poco probable que funcione ahora, tampoco.

La única solución confiable es matar al proceso de los padres. Cuando termina, sus procesos infantiles son heredados por el en eso Proceso, que es el primer proceso que se ejecuta en un sistema Linux (su ID de proceso es 1).

los en eso El proceso realiza regularmente la limpieza necesaria de los zombies, por lo que para matarlos, solo tienes que matar el proceso que los creó. los cima El comando es una forma conveniente de ver si tiene algún zombies.

Escriba lo siguiente:

  Top  

Este sistema tiene ocho procesos Zombie. Nosotros puede enumerar estos utilizando el PD mando y canjearlo en egrep . Nuevamente, los procesos de Zombie tienen una bandera estatal de "Z", y por lo general también verás "difunto".

Escriba lo siguiente:

 PS AUX | EGREP "Z | difunto" 

Los procesos de Zombie están listados.

Esta es una forma más amable de descubrir los ID de proceso de zombies que desplazarse hacia adelante y hacia adelante. cima . También vemos que una aplicación llamada "BADPRG" engendró estos zombis.

El ID de proceso del primer zombie es de 7641, pero debemos encontrar el ID de proceso de su proceso padre. Podemos hacerlo usando PD de nuevo. Usaremos la opción de salida ( -o ) decir PD para mostrar solo el ID de proceso de los padres, y luego pasarlo con el PPID = bandera.

El proceso que queremos encontrar se indicará utilizando el uso del -pag (Procesar) la opción, y luego pasar en la ID del proceso de Zombie.

Por lo tanto, escribimos el siguiente comando para buscar la información del proceso para el proceso 7641, pero solo informará el ID del proceso principal:

 PS -O PPID = -P 7641 

Nos dijeron que el ID de proceso de los padres es 7636. Ahora podemos hacer referencia a los que se hace referencia utilizando PD una vez más.

Vemos que esto coincide con el nombre del proceso principal de anteriormente. Para matar el proceso de los padres, use la opción SIGKILL con el comando KILL de la siguiente manera:

 Mata a -sigkill 7636 

Dependiendo del propietario del proceso principal, es posible que también necesite usar sudo .

Los zombis no son aterradores ...

... a menos que estén en una horda masiva. A algunos no se preocupan por qué preocuparse y un simple reinicio se eliminará.

Sin embargo, si observa que una aplicación o proceso siempre está desovando a los zombies, eso es algo que debe mirar. Es más probable que sea solo un programa escrito por escrito, en cuyo caso, quizás haya una versión actualizada que se limpie correctamente después de sus procesos secundarios.


Linux - Artículos más populares

Cómo obtener un administrador de dispositivos gráficos para Linux

Linux Mar 17, 2025

Estudio de África / Shutterstock.com Hay interminable Utilidades de la línea de comandos de Linux que muestran los detalles del hardware de su computad..


Las 6 mejores distribuciones ligeras de Linux

Linux Jul 27, 2025

3DMI / Shutterstock.com Si su computadora con Windows o Mac es antigua y lucha para mantenerse al día, la instalación de Linux puede darle un nuevo arrendami..


Cómo usar el comando FSCK en Linux

Linux Aug 18, 2025

Pixza Studio / Shutterstock Todos nuestros datos importantes se sienten en un sistema de archivos de un tipo u otro, y los problemas del sistema de archivos es..


Esta nueva computadora portátil Linux Gaming tiene las especificaciones para ejecutar cualquier cosa

Linux Oct 20, 2025

JUNTO Computadoras Linux y los juegos están empezando a unirse mucho más últimamente. los Plataforma de vapor está en camino con Linux instalado, y Juno ..


¿Puedes instalar Linux en un M1 Silicon Mac de M1?

Linux Nov 12, 2024

No todos compran una Mac para ejecutar únicamente MacOS. La mala noticia es que a partir de noviembre de 2021, el apoyo nativo de Linux en Apple Silicon aún no es posible. Sin embargo,..


Cómo agregar un usuario al archivo de sudoers en Linux

Linux Oct 30, 2025

Si un sudo El comando en Linux le consigue un mensaje de que un usuario "no está en el archivo de sudoers", deberá ingresar a la lista de "sudoers". Pasaremos a través de agregar ..


Cómo enumerar las variables de entorno en Linux

Linux Oct 31, 2025

En Linux, las variables de entorno contienen valores y configuraciones importantes. Los scripts, las aplicaciones y los shells leen estos valores, a menudo para configurarse o para controlar su..


Cómo establecer una dirección IP estática en Ubuntu

Linux Oct 17, 2025

Su red doméstica se basa en las direcciones IP para enrutar datos entre dispositivos y, a veces, en la reconectación de la red puede cambiar la dirección de la red. Aquí le mostramos cómo ..


Categorías