:: Re: [DNG] Reaping orphan processes.
Top Page
Delete this message
Reply to this message
Author: aitor
Date:  
To: dng
Subject: Re: [DNG] Reaping orphan processes.
Hi again,

On 4/3/23 22:30, aitor wrote:
>
> Hi Hendrik,
>
> On 4/3/23 18:44, Hendrik Boom wrote:
>> Why can't they just terminate by themselves?
> Consider the following example:
>
> /* ---------- example.c ------------ */
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
>
> int main()
> {
>     int pid;
>
>     pid=fork();
>     if(pid==0)
>     {
>         printf("\nI am the child\n");
>         sleep(60);
>         return 0;
>     }
>     if(pid>0)
>     {
>         while(1)
>             printf("\nI am the parent\n");
>     }
>
>     return 0;
> }
>
> /* ---------------------- */
> Compile with `gcc example.c -o example` and run it.
> Now get the pid of both the parent and the child. Say:
> $ pidof example
> 30260  30259
> During the first 60 seconds you'll find the following line in "/proc/30260/status":
>     State:    Z (sleeping)
> that will be turned into:
>     State:    Z (zombie)
> at the end of the delay period. In this example, the child became a zombie process
> because it exited but its parent is still alive and has not called wait() on it.
> In this scenario, if you run the `ps` command you'll still find both processes; that is,
> the original process (which is the parent spawned by the shell) and its child:
> $ ps -A | grep example
> 30259 pts/1    00:00:36 example
> 30260 pts/1    00:00:00 example <defunct>
> However, you'll not be able to terminate the zombie process by sending a signal to it.
> HTH,
> Aitor.


Sorry, this is an example of a zombie process, created because the parent process didn't use the
wait() system call to read its exit status of the child, but you are asking about orphan processes
reclaimed by init when the parent terminates before the child.

Aitor.