System information as of Fri Mar 9 19:40:01 KST 2012
System load: 0.59 Processes: 167
Usage of /home: 23.0% of 11.00GB Users logged in: 1
Swap usage: 0% IP address for eth1: 192.168.0.1
=> There is 1 zombie process.
Graph this data and manage this system at https://landscape.canonical.com/
10 packages can be updated.
4 updates are security updates.
Last login: Fri Mar 9 10:23:48 2012
a@SERVER:~$ ps auxwww | grep 'Z'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
usera 13572 0.0 0.0 7628 992 pts/2 S+ 19:40 0:00 grep --color=auto Z
a@SERVER:~$
¿Cómo encontrar ese proceso zombie?
ps auxwww | grep 'Z'
comando debería haber mostrado un proceso en unZ
estado. El dicho "información del sistema"=> There is 1 zombie process.
parece ser un error. O eso, o falta información en la pregunta.Respuestas:
Para matar a un zombie (proceso) debes matar su proceso padre (¡como los zombies reales!), Pero la pregunta era cómo encontrarlo.
Encuentra el zombie (la pregunta respondió esta parte):
Lo que obtienes son zombis y cualquier otra cosa con una Z, por lo que también obtendrás el grep:
Encuentra el padre del zombie:
Te regalaré:
En este caso, no quieres matar ese proceso padre y deberías estar bastante contento con un zombie, pero matar el proceso padre inmediato 5145 debería deshacerte de él.
Recursos adicionales en askubuntu:
fuente
ps wauxf
hace lo mismoAunque esta pregunta es antigua, pensé que todos merecían una respuesta más confiable:
Esto emitirá dos columnas delimitadas por espacios en blanco, la primera de las cuales es un PID y la segunda es su estado.
No creo que incluso GNU
ps
proporcione una forma de filtrar por estado directamente, pero puede hacerlo de manera confiable conawk
Ahora tiene una lista de PID que son zombies. Como conoce el estado, ya no es necesario mostrarlo, por lo que puede filtrarse.
Dando una lista delimitada de nueva línea de PID zombies.
Ahora puede operar en esta lista con un simple bucle de shell
ps
es una herramienta poderosa y no necesita hacer nada complicado para obtener información del proceso.(Significado de los diferentes estados del proceso aquí: https://unix.stackexchange.com/a/18477/121634 )
fuente
awk
También es una herramienta poderosa que no solo divide el texto, sino que también puede combinarlo. +1 ... los otros lo usarongrep
donde es innecesario e impreciso.ps -p "$pid" -opid=,ppid=
ppid=
a la lista de opciones, por lo que no es necesario usar un comando separado para obtener ppid.ps aux | awk '{ print $8 " " $2 }' | grep -w Z
De: http://www.cyberciti.biz/tips/killing-zombie-process.html
De los comentarios uno mejorado:
Pero cuidado: este también mata el proceso.
fuente
ps axo pid=,stat= | awk '$2~/Z/ {print $1}'
lugar).Sin embargo, menos es más:
Es decir, dame un bosque (árbol) de todos los procesos de los usuarios en un formato orientado al usuario con ancho ilimitado en cualquier tty y muéstramelo en la mitad de la pantalla arriba, donde coincide con el caso de que la octava columna contenga una Z, y ¿Por qué no resaltar toda la línea?
El formato orientado al usuario parece significar:
USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND
por lo tanto, el estado de Zombie aparecerá en la octava columna.Puede agregar un
N
antes delp
si desea números de línea y unJ
si desea un asterisco en el partido. Lamentablemente, siG
no resaltas la línea que el asterisco no mostrará, aunqueJ
crea espacio para ello.Terminas obteniendo algo que se parece a:
Usted podría seguir esto con (y va a detectar si su terminal le gusta -U Unicode o -A ASCII):
O simplemente, ya sabes, usa la flecha
less
hacia arriba para seguir ese árbol / bosque a través de la jerarquía; que es lo que estaba recomendando con el enfoque "Menos es más".fuente
Te sugiero este comando:
fuente
aux
y combinar cadenas es innecesariamente poco confiable cuando puede usar-o
y solicitar exactamente lo que desea. Usar en sups ax -o pid=,stat= | awk '$2 ~ "[Zz]" { printf("%s, PID = %d\n", $2, $1); }'
lugar.Para enumerar zombis de proceso, prueba este comando:
Es posible que deba cambiar
$7
según su sistema operativo.Esto también devolverá la lista de sus identificadores de proceso padre (
PPID
).Para intentar matar a los zombies (después de probar el comando anterior), intente:
Para identificar a sus padres, intente con
pstree
, como:fuente
j
formato para esto es innecesariamente complicado. Use-o
para seleccionar lo que desea en su lugar.ps j
no imprime todos los procesos en el sistema. Solo enumera los procesos de usuario actuales (en el estilo de trabajos BSD), por lo que puede perder procesos zombie.