24.19. Why You Can't Kill a Zombie
Processes in your ps output that are in the
<exiting> or Z status are called zombies.
You cannot kill
zombies; they are already dead.
"What is a zombie?" I hear you ask.
"Why should a dead process stay
around?"
Dead processes stick
around for two principal reasons. The lesser of these is that they
provide a sort of "context" for
closing
open file descriptors (Section 24.3) and shutting down other resources (memory,
swap space, and so forth). This generally happens immediately, and
the process remains only for its major purpose: to
hold on to its name and exit status (Section 35.12).
A process is named by its
process ID or PID. Each process also has
associated with it a parent process ID. The
parent PID, or PPID, is the PID of the process that created it via
fork (Section 24.2);
if that particular process has since vanished, the parent PID is 1
(the PID of init (Section 24.2)). While the original parent is around, it can
remember the PIDs of its children. These PIDs cannot be reused until
the parent knows the children are done. The parent can also get a
single byte of status (Section 35.12) from each child. The
wait system call looks for a zombie child, then
"collects" it, making its PID
available and returning that status. The init(8) program is
always waiting, so that once a parent exits, init
will collect all its children as they exit and promptly ignore each
status.
So, to get rid of a zombie, you must wait for it. If you have already
done so or if the process' PPID is 1, the process is
almost certainly stuck in a device driver close routine, and if it
remains that way forever, the driver has a bug.
-- CT
 |  |  | 24.18. Cleaning Up an Unkillable Process |  | 24.20. The Process Chain to Your Window |
Copyright © 2003 O'Reilly & Associates. All rights reserved.
|