GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo matar un proceso zombie en Linux

¡Feliz Halloween, Open SOURCE-rers!

Aquí hay una historia tan antigua como epoch tiempo. Desde que existieron C y Unix, y (posteriormente) Linux, hemos tenido zombis . Específicamente, hay procesos que se marcan como un proceso zombie . Incomprendido por algunos, ignorado por otros e inmune a los esfuerzos de tantos de nosotros tratando de kill estos procesos sin mucho éxito. ¿Por qué es eso?

¿Qué es un proceso en Linux?

Todo comienza cuando se ejecuta un programa en Linux, y cuando lo hace, su instancia en ejecución se denomina proceso. Puede ver todos los procesos en su entorno Linux con ps comando.

$ ps -ax
        PID TTY         STAT   TIME COMMAND
        1 ?     Ss      0:01 /usr/lib/systemd/systemd rhgb --switched-root --sys
        2 ?     S       0:00 [kthreadd]
        3 ?     I<      0:00 [rcu_gp]
        4 ?     I<      0:00 [rcu_par_gp]

A veces, un proceso inicia otro proceso, haciendo que el primer proceso sea el padre del segundo. El pstree comando es una gran herramienta que le permite ver la "genealogía" de los procesos en su sistema.

$ pstree -psn
systemd(1)─┬─systemd-journal(952)
        ├─systemd-udevd(963)
        ├─systemd-oomd(1137)
        ├─systemd-resolve(1138)
        ├─systemd-userdbd(1139)─┬─systemd-userwor(12707)
        │                     ├─systemd-userwor(12714)
        │                     └─systemd-userwor(12715)
        ├─auditd(1140)───{auditd}(1141)
        ├─dbus-broker-lau(1164)───dbus-broker(1165)
        ├─avahi-daemon(1166)───avahi-daemon(1196)
        ├─bluetoothd(1167)

A cada proceso se le asigna un número en el sistema. El ID de proceso número 1 se asigna al primer proceso que se ejecuta durante el proceso de arranque, y todos los procesos subsiguientes después del PID 1 son descendientes de él. El proceso PID 1 es init , que en la mayoría de las versiones más nuevas de Linux es solo un enlace simbólico al systemd programa.

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Terminar un proceso con el comando kill

Puede finalizar procesos en un sistema Linux con kill comando. A pesar del nombre, el kill comando y un conjunto de otros como pkillkillall fue escrito/diseñado para enviar SEÑALES a uno o más procesos. Cuando no se especifica, la SEÑAL predeterminada que envía es la señal SIGTERM para terminar el proceso.

Cuando un proceso principal muere o se elimina, y su proceso secundario no sigue la desaparición de su padre, llamamos a ese proceso proceso huérfano .

Cómo matar un proceso zombie

¡Los procesos zombis, por otro lado, no se pueden matar! ¿Por qué podrías preguntar? ¡Pues porque ya están muertos!

Cada proceso secundario, cuando finaliza, se convierte en un proceso zombie y luego lo elimina el padre. Cuando el proceso sale de su existencia y libera los recursos que había utilizado, su nombre todavía está en la tabla de procesos del sistema operativo. Entonces es el trabajo de proceso del padre eliminar su nombre de la tabla de procesos. Cuando eso falla, tenemos el proceso zombi, que ya no es realmente un proceso, sino solo una entrada en la tabla de procesos del sistema operativo.

Esta es la razón por la que intentar hacer un kill comando incluso con el -9 La opción (SIGKILL) en un proceso difunto (zombie) no funciona, porque no hay nada que matar.

Entonces, para matar un proceso zombie, como para eliminar su nombre de la lista de procesos (la tabla de procesos), debe matar a su padre. Por ejemplo, si el PID 5878 es un proceso zombi y su padre es el PID 4809, entonces para matar al zombi (5878) finaliza el padre (4809):

$ sudo kill -9 4809  #4809 is the parent, not the zombie

Mi última palabra de advertencia sobre los zombis. Tenga mucho cuidado al eliminar los procesos principales. Si el padre de un proceso es PID 1 y lo matas, ¡reiniciarás tú mismo!

¡Y esa será una historia aún más aterradora que contar!


Linux
  1. Cómo instalar vtop en Linux

  2. ¿Cómo matar un proceso cuyo padre es Init?

  3. ¿Cómo matar un proceso en Linux usando el comando?

  4. Linux:Buscar y eliminar procesos zombis

  5. Cómo pausar/reanudar un proceso en Linux

Cómo matar procesos Zombie en Linux

Cómo matar procesos Zombie en Ubuntu 20.04 LTS

Cómo matar el proceso de ejecución de Linux en un puerto particular

Cómo MATAR un proceso en Linux

Cómo matar o terminar un proceso de Linux:la guía definitiva

Cómo matar procesos Zombie en Ubuntu