Double forking to prevent Zombie process
Last Updated :
30 May, 2017
We have discussed Three methods of Zombie Prevention. This article is about one more method of zombie prevention.
Zombie Process: A process which has finished the execution but still has entry in the process table to report to its parent process is known as a zombie process. A child process always first becomes a zombie before being removed from the process table.
How Creating a Grandchild / Double Forking helps?
- The parent calls wait and creates a child. The child creates a grandchild and exits.
- The grandchild executes its instruction(task) and eventually it terminates. As the child has already exited, the grandchild will be taken care by init process.
- Init collect the exit status of grandchild. Hence the grandchild is not a zombie.
Note: Child is not a zombie as the parent called wait. Also in this case, the parent cannot verify the exit status of grandchild.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
pid = fork();
if (pid == 0)
{
pid = fork();
if (pid == 0)
printf ( "Grandchild pid : %d\n Child"
" pid : %d\n" , getpid(), getppid());
}
else
{
wait(NULL);
sleep(10);
}
}
|
Share your thoughts in the comments
Please Login to comment...