Ernst May-Jung <[EMAIL PROTECTED]> writes:
> ein Blick in die TOP zeigt mir das bei mir Zombies unterwegs sind:
>
> Tasks: 167 total, 2 running, 163 sleeping, 1 stopped, 1 zombie
>
> Wie kann ich die Aufspüren und uptimeunschädlich entsorgen?
Was ist eigentlich ein Zombie? Nehmen wir an, dass Du einen Prozess A
hast, der Kind-Prozesse startet, z.B. B. Irgendwann ist B beendet,
d.h. es existiert nur noch der exit-Code, der an Prozess A übergeben
werden muss. Nun wartet aber A nicht darauf, und dann haben wir den
Salat.
In der Prozess-Liste findest Du einen Prozess als "defunct":
$ ps aux | grep defunct
jochen 23606 0.0 0.0 0 0 pts/4 Z+ 22:32 0:00
[sleep] <defunct>
Nun interessiert uns davon der Vater-Prozess:
jochen 23606 10234 0 22:33 pts/4 00:00:00 sleep 60
jochen 23607 23606 0 22:33 pts/4 00:00:00 [sleep] <defunct>
Wenn wir nun den Vaterprozess beenden, dann übernimmt init(8) diese
Rolle und nimmt den Exit-Code entgegen.
In Deinem Fall vermute ich, dass der Prozess im Status "stopped" etwas
damit zu tun haben könnte (evtl. kannst/musst Du diesem nur per kill das
SIGCONT Signal schicken). Ansonsten sind Zombies praktisch immer
durch Programmierfehler verursacht.
Zum Experimentieren hier mein Skript, mit dem ich Zombies nach Wunsch
erzeugen kann:
#!/bin/sh
#
# Create a zombie process for some time. This is useful when writing
# a system monitor that is looking for zombie processes and alerts
# the admin.
#
# If an argument is given, the zombie process exists for that number
# of seconds. If no argument is given, the zombie is there for 60
# seconds.
# Get the time we should keep the zombie around. If no argument use
# 60 seconds.
time=${1:-60}
# This is going to be the zombie process.
sleep 1 &
echo "Zombie PID is $!"
# and we don't accept any signals.
exec sleep $time
# init(8) will clean up after us.
Jochen
--
#include <~/.signature>: permission denied
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org