hi Lal,

thanks for the analysis and clearing the doubt. so, parent process returns
while child is added in to runqueue. right?

Regards,

mitul modi

On Sun, Oct 5, 2008 at 1:55 PM, Lal <[EMAIL PROTECTED]> wrote:

> On Thu, Oct 2, 2008 at 3:55 PM, Mitul Modi <[EMAIL PROTECTED]> wrote:
> >
> >
> > On Wed, Oct 1, 2008 at 6:12 PM, srimugunthan dhandapani
> > <[EMAIL PROTECTED]> wrote:
> >>
> >> hi all,
> >> I want to understand how the fork call return 0 in child and 'pid of
> >> child' in the parent.
> >> Presently my (naive)understanding is that the %eax value is stored
> >> differently for the child and the parent.
> >> Both the child and the parent returns from fork to the same instruction
> >> address, but will have different return values according to %eax.
>
> The parent process and child process get their return values
> differently. As Peter Teoh explained, kernel writes the child
> process's pid directly to parent process user space pointer.
> In function copy_process
>         if (clone_flags & CLONE_PARENT_SETTID)
>                 if (put_user(p->pid, parent_tidptr))
>
> While child process gets return value from %eax.
> In function copy_thread
>        childregs = task_pt_regs(p);
>        *childregs = *regs;
>        childregs->eax = 0;
>        childregs->esp = esp;
>
> Therefore, after fork system call in application, parent process
> returns with child process' pid while child process returns with 0.
>
> -Lal
>

Reply via email to