Think of it as the parents not burying their dead children ;-).
Those processes listed as defunct are known as zombies. The purpose of a
zombie process is to hold the status information until the parent process
picks it up. The only resource being used at that point is a slot in the
process table.
FWIW, here's a Q&D zombie maker:
main()
{
if(fork() == 0)
exit(255);
pause();
}
The parent creates a child process. The child process exits, but the
parent never picks up the status via a wait() system call.
Here's an example that doesn't create zombies:
main()
{
int status;
if(fork() == 0)
exit(255);
wait(&status);
pause();
}
The bonus question is: in the former example if the parent process is
killed (SIGINT/keyboard interrupt for example), what process picks up the
status from the zombie process?
rna
On Sun, 18 Jan 2004, Michael Havens wrote:
>
> It seems that when I 'ps -e' I have many processes that say 'defunct' next to
> them. I tried killing them with signals 1, 9, and 15 to no avail. I then read
> in the UNIX commands reference section in UNIX Complete that signal 9 leaves
> residue after the kill that must be cleaned up. However, if, as I always
> thought, a reboot is supposed to clean your system why do I have so many
> defunct proccesses? kmail does not always load when I issue the command
> 'kmail' and I am hoping that getting rid of these defunct proccesses will
> alieviate this problem.....
>