Woher kommen Zombie-Prozesse und wie wird man sie wieder los? Bereits vor einiger Zeit bin ich über eine sehr gute englische Beschreibung gestolpert:
A process fully terminates when two events have booth happened: (1) the process itself has exited (or has been killed by a signal), and (2) its parent has executed a wait system call to find out what happened. A process that has exited or has been killed, but whose parent has not (yet) done a wait for it, enters a kind of suspended animation, ometimes known as zombie state. It is prevented from beeing scheuled and has its alarm timer turned off (if it was on), but it is not removed from the process table. Its memory is freed. Zombie state is temporary and rarely lasts long. When the parent finally does the wait, the process table slot is freed, and the file system and kernel are informed. A problem arises if the parent of an exiting processs is itself already dead. If no special action were taken, the exiting process would remain a zombie forever. Instead, the tables are changed to make it a child of the init process. When the system comes up, init reads the /etc/ttytab file to get a list of all terminals, and then forks off a login process to handle each one. It then blocks, waiting for processes to terminate. In this way, orphan zombies are cleaned up quickly.
Als Quelle habe ich das folgende Buch in Erinnerung, allerdings in einer etwas älteren Auflage: