¿Hay alguna forma de matar un proceso zombie sin reiniciar? Así es como sucedió:
Quiero descargar un archivo de 12GB usando torrent. Después de agregar el archivo .torrent, la transmisión se convirtió en un proceso zombie (también probé ktorrent. El mismo comportamiento). Finalmente pude descargar el archivo usando µTorrent pero después de cerrar el programa, también se convierte en un zombie.
Intenté usarlo kill
, skill
y pkill
con diferentes opciones y -9
señal, pero no tuve éxito.
Después de leer algunas soluciones en la web, descubrí que matar al padre puede matar al zombi. Pero matar vino tampoco ayudó.
¿Hay otra manera?
Editar:
ps -o pid, ppid, stat, comm
PID PPID STAT COMMAND
7121 2692 Ss bash
7317 7121 R+ ps
salida de pstree:
init─┬─GoogleTalkPlugi───4*[{GoogleTalkPlug}]
├─NetworkManager─┬─dhclient
│ └─{NetworkManager}
├─acpid
├─amarok───19*[{amarok}]
├─apache2───5*[apache2]
├─atd
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activat}
├─clock-applet
├─console-kit-dae───63*[{console-kit-da}]
├─cron
├─cupsd
├─2*[dbus-daemon]
├─2*[dbus-launch]
├─desktopcouch-se───desktopcouch-se
├─firefox───run-mozilla.sh───firefox-bin─┬─plugin-containe───8*[{plugin-contain}]
│ └─14*[{firefox-bin}]
├─gconfd-2
├─gdm-binary─┬─gdm-simple-slav─┬─Xorg
│ │ ├─gdm-session-wor─┬─gnome-session─┬─bluetooth-apple
│ │ │ │ ├─compiz───sh───gtk-window-deco
│ │ │ │ ├─fusion-icon
│ │ │ │ ├─gdu-notificatio
│ │ │ │ ├─gnome-panel───{gnome-panel}
│ │ │ │ ├─gnome-power-man
│ │ │ │ ├─gpg-agent
│ │ │ │ ├─gwibber-service
│ │ │ │ ├─nautilus
│ │ │ │ ├─nm-applet
│ │ │ │ ├─polkit-gnome-au
│ │ │ │ ├─2*[python]
│ │ │ │ ├─qstardict───{qstardict}
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─tracker-applet
│ │ │ │ ├─trackerd
│ │ │ │ ├─wakoopa─┬─wakoopa
│ │ │ │ │ └─3*[{wakoopa}]
│ │ │ │ └─{gnome-session}
│ │ │ └─{gdm-session-wo}
│ │ └─{gdm-simple-sla}
│ └─{gdm-binary}
├─6*[getty]
├─gnome-keyring-d───2*[{gnome-keyring-}]
├─gnome-screensav
├─gnome-settings-
├─gnome-system-mo
├─gnome-terminal─┬─bash───ssh
│ ├─bash───pstree
│ ├─gnome-pty-helpe
│ └─{gnome-terminal}
├─gvfs-afc-volume───{gvfs-afc-volum}
├─gvfs-fuse-daemo───3*[{gvfs-fuse-daem}]
├─gvfs-gdu-volume
├─gvfsd
├─gvfsd-burn
├─gvfsd-computer
├─gvfsd-metadata
├─gvfsd-trash
├─hald─┬─hald-runner─┬─hald-addon-acpi
│ │ ├─hald-addon-cpuf
│ │ ├─hald-addon-inpu
│ │ └─hald-addon-stor
│ └─{hald}
├─indicator-apple
├─indicator-me-se
├─indicator-sessi
├─irqbalance
├─kded4
├─kdeinit4─┬─kio_http_cache_
│ └─klauncher
├─kglobalaccel
├─modem-manager
├─multiload-apple
├─mysqld───10*[{mysqld}]
├─named───10*[{named}]
├─nmbd
├─notification-ar
├─notify-osd
├─polkitd
├─pulseaudio─┬─gconf-helper
│ └─2*[{pulseaudio}]
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smbd───smbd
├─snmpd
├─sshd
├─timidity
├─trashapplet
├─udevd───2*[udevd]
├─udisks-daemon─┬─udisks-daemon
│ └─{udisks-daemon}
├─upowerd
├─upstart-udev-br
├─utorrent.exe───{utorrent.exe}
├─vnstatd
├─winbindd───2*[winbindd]
├─wnck-applet
├─wpa_supplicant
└─xinetd
El monitor del sistema y la parte superior muestran que el proceso zombie está utilizando recursos:
Edición 2: creo que encontré algo. Traté de cerrar sesión y vi este mensaje:
Dado que otros clientes de torrent tienen el mismo problema, tal vez se deba al tamaño del archivo. Estoy usando ubuntu 10.04 en particiones ext4. Matar nautilus y enviarle la señal SIGCHLD no funcionó.
ps -o pid,ppid,stat,comm
ypstree
a tu pregunta?Respuestas:
No creo que el proceso zombie sea un gran dolor de cabeza. Un proceso zombie no consume ningún recurso. Es solo que tiene su entrada en la tabla de procesos.
Un proceso Zombie no es un proceso huérfano, tiene un padre.
kill
,skill
pkill
no funcionará ya que el proceso ya se ha eliminado, solo que su entrada no se ha eliminado.El proceso de zombis se puede matar enviando una
SIGCHLD
señal al padre. Creo que el número de señalSIGCHLD
es17
o18
Si esto también falla, es posible que desee matar al padre mismo.
De Wikipedia en señal SIGCHLD:
EDITAR 1 : Los recursos del sistema consumidos son principalmente la entrada de la tabla de proceso. Si alguien sabe si consume más que eso: memoria o ciclo de CPU, entonces agregue una explicación. AFAIK apenas ocupa recursos significativos del sistema.
EDITAR 2: Cita de Wikipedia
Por lo tanto, la entrada se mantiene para que el proceso padre pueda conocer el estado de salida porque en el momento en que el niño sale, el padre probablemente no esté en un estado o no esté listo para leer su estado de salida.
EDITAR 3
Hasta la fecha, nunca experimenté un proceso zombie tomando el 100% de la CPU. Al ver esto por primera vez.
Intenta hacer un
killall utorrent.exe
Puedo ver que hay dos instancias
utorrent.exe
y una de ellas es zombie. Probablemente el segundo (niño). Killall debería matar al padre ya que el niño (zombie) no puede ser asesinado.EDITAR 4
Parece que el Killall no funcionó ya que estaba dando una señal TERM en lugar de KILL.
Probar
killall --signal=KILL utorrent.exe
Si esto no funciona, intente matar el proceso selectivamente.
Obtenga la lista de PID de proceso utorrent.exe
Deberías obtener dos procesos como
Entonces el segundo es el padre. Mátalo usando
EDITAR 5
Intenta encontrar el ID principal del proceso con este comando bash
en tu caso es
Si la salida viene como
Entonces, tristemente, creo que no tienes suerte. El Id. De proceso
1
pertenece a init sin el cual su sistema no puede ejecutarsefuente
A zombie process does not take up any resources
y citóthe child is still consuming system resources ... it is known as a zombie process
.top -H
para mostrar hilos en lugar de procesos en la parte superior.Usar
kill
el proceso en sí mismo es de hecho ineficaz, ya que el proceso ya está muerto;kill
trae un proceso en vivo al estado zombie.El proceso padre es responsable de recoger el código de salida del proceso; el proceso sigue siendo un zombie hasta que esto se haga. El
init
proceso recogerá el código de salida de cualquier proceso y lo desechará, por lo que es el padre del "último recurso" el que limpiará a cualquier zombie que sea un descendiente directo.Matar al padre del proceso zombie generalmente es efectivo porque el proceso zombie luego vuelve a
init
ser su padre tan pronto como el proceso padre desaparece (es decir, matar al padre ha convertido ese proceso en zombie, y el abuelo ha leído el código de salida del padre) , así que el padre realmente se fue). Un zombie puede ser padre de un zombie, por lo que simplemente matar al padre no es suficiente, también debe ser recolectado por otro proceso.Tenga en cuenta que los procesos nunca son responsables de limpiar a sus nietos: siempre vuelven al proceso 1 como padre (razón por la cual los autores de demonios a veces usan una doble bifurcación () y terminan el proceso en el medio para disociar completamente el proceso hijo de la invocación cáscara)
La razón por la cual matar
wine
probablemente no es efectivo es porque no fue realmente el padre del proceso zombie; más bien, el "utorrent.exe" que es un descendiente directo de init es. Sin embargo, este proceso todavía se ejecuta normalmente, simplemente descuida sus deberes.fuente
ps waux
aparece en laPPID
columna del zombi.Manera mucho más fácil que killall, -9, etc.
1) Use qBitorrent en lugar de la consola uTorrent (también estoy esperando una versión GUI y qBitorrent es esencialmente eso).
2) Si está utilizando 11.04 o superior, presione alt + f2 (abre una ventana de comandos especiales), escriba xkill y su mouse ahora es una x. Haga clic en el programa que desea cerrar (UI = ID de proceso) y lo matará por usted.
Consejo avanzado: enlace un atajo de teclado para "xkill" como lo tengo en mi teclado macro G15.
fuente
En mi caso, cuando el vino se cuelga y no puedo matar al niño Zombie con una escopeta, haría:
wineserver -k
entonces mataría al "Hijo del Proceso"killall -9 Oblivion.exe
(por ejemplo)Por lo que entiendo, el servidor de vinos envía una señal a todos sus Zombie Childs de que todos van a morir (debido a la escopeta que sabes), pero a veces un niño piensa por sí mismo y quiere conquistar el mundo. Entonces hago el adicional
killall -9
okill -9
con la identificación del proceso.fuente
kill -s SIGCHLD ppid
Supongo que estás usando una SSD.
Al agregar torrentes grandes a un cliente de torrent, los archivos de "marcador de posición" del torrent que está descargando se crean realmente en el disco, pero están vacíos hasta que se llenan gradualmente durante el proceso de descarga.
Con un disco duro normal, el disco es el cuello de botella y no notará un problema de rendimiento con el resto de su escritorio.
Sin embargo, cuando se utiliza un SSD, la CPU es el cuello de botella y la aplicación parece haberse bloqueado (se vuelve gris). Si lo dejas por un tiempo, se recuperará y todo estará bien. Esta ha sido mi experiencia desde que me cambié a un SSD.
Con respecto a los procesos de eliminación, otros han brindado mejores consejos que yo: el uso de la señal KILL generalmente funciona, pero he tenido el extraño que requirió un reinicio a lo largo de los años.
fuente