Cómo matar un proceso zombie en una Mac

13

¿Cómo matar un proceso zombie o encontrar su proceso padre en una Mac usando la Terminal?

eFrane
fuente
3
@soandos No es un duplicado, ya que ese tema no se trata de zombies. Ninguna de las killseñales funciona para zombies IIRC. Me ha pasado esto antes.
Daniel Beck
Por lo general, uno puede matar zombies si se conoce el proceso principal, pero esto requiere matar a ese también, lo que no siempre es una opción agradable. Por lo tanto, me pregunto si hay otra solución para esto.
eFrane

Respuestas:

16

Hack Saw dice:

Lamentablemente , parece que matar zombis se trata de matar al padre , y si el padre es / sbin / launchd, puedes matarlo solo con el reinicio.

Sería una muy mala idea matar launchd, pero puedes decirle a HUP.

Tratar sudo kill -s HUP 1

Eso hará launchdque se reinicialice sin reiniciar. Esto me ha funcionado en el pasado (wrt. Eliminando las entradas de zombies).

sean
fuente
3

Lamentablemente , parece que matar zombis se trata de matar al padre , y si el padre es / sbin / launchd, puedes matarlo solo con el reinicio.

Estoy obteniendo zombies usando Xcode y deteniendo el simulador, y está entregándolos a mi propio personal / sbin / launchd, que no desapareció cuando me desconecté.

El comando ps -xo pid, ppid, stat, le mostrará sus procesos, con su ID principal en la segunda columna.

Hack Saw
fuente
1

los procesos zombis ya están muertos y no pueden ser asesinados. Deben eliminarse de la tabla de procesos automáticamente cuando el proceso padre muere.

No ralentizan su máquina y puede dejarlos allí (son solo entradas en la tabla de proceso).

Hay un número máximo de procesos (puede verificarlo sysctl kern.maxproc) y los procesos zombie lo reducirán (a medida que se cuentan).

Si alcanza este límite, no podrá crear nuevos procesos y se verá obligado a reiniciar.

Matteo
fuente
"Debería eliminarse", pero no siempre son así. Xcode es terrible por dejar procesos zombies, y no se limpian incluso si Xcode muere / se cierra / se mata.
JRG-Developer
@ JRG-Developer Estoy de acuerdo pero no son un problema. No consumen ningún recurso.
Matteo
2
En realidad, son un problema cuando se crean demasiados y fork no puede iniciar ningún proceso nuevo y se ve obligado a reiniciar.
Adam
2
Son un problema cuando desea reiniciar el proceso bloqueado y usarlo nuevamente, pero no puede hacerlo sin reiniciar.
MarcusJ
44
Cuando una aplicación se pone en ese estado, no puede volver a iniciarla hasta que se borre la entrada anterior. No está utilizando ningún recurso, pero la contaminación de la tabla impide que se inicie una nueva instancia, por lo tanto, está bloqueado hasta que se reinicia.
George