[LCP]A small doubt on fork

sasidhar p psasidhar at hotmail.com
Fri Oct 19 21:58:24 UTC 2001


Hi,
  I do agree that the process's address space is copied over the fork to 
child, so the address of i in child process should be different....

May be I will agree with Andrew Webber that the addresses are relative...

Can somebody clarify me this point...

I am reproducing a diagram of Typical memory management from steven advanced 
programming in the unix environment...p168

------------------------------
high address(command line args
and environ variables)
------------------------------

stack

..............................





..............................

Heap

------------------------------
uninitialized data(bss)
(initialized to zero by exec)
------------------------------
initialized data
------------------------------
Text

Low address
------------------------------

Question : Now what portions of this does the child inherit when a call to 
fork is made...

I believe an entire new copy of the above is made for the child process and 
hence my argument saying that the address of i in child process should be 
different as it is in a different location...

May be Mr.Andrew Webber is right saying that the address of i is relative to 
this child process. Then chances are more that you get the same address both 
in parent and child... Is this argument correct??

Thanx,
Sasi.








>From: "Bradley, Peter" <PBradley at uwic.ac.uk>
>Reply-To: linuxcprogramming at lists.linux.org.au
>To: "'linuxcprogramming at lists.linux.org.au'" 
><linuxcprogramming at lists.linux.org.au>
>Subject: RE: [LCP]A small doubt on fork
>Date: Fri, 19 Oct 2001 10:12:18 +0100
>
>Hi,
>
>I think what the enquirer needs to know is that a process's address space 
>is
>copied over the fork.
>
>man fork says:
>
>       The fork() system call causes the creation of a new process. The new
>
>       child process is created wth exactly one thread or lightweight
>
>       process. The new child process contains a replica of the calling
>
>       thread (if the calling process is multi-threaded) and its entire
>
>       address space, possibly including the state of mutexes and other
>
>       resources.
>
>(my emphasis)
>
>HTH
>
>Peter
>
>  -----Original Message-----
>From: 	Asif Raj [mailto:asif at gdit.iiit.net]
>Sent:	19 October 2001 09:53
>To:	linuxcprogramming at lists.linux.org.au
>Subject:	Re: [LCP]A small doubt on fork
>
>It is because when the execution of the program begins, variable i is
>initialised and assigned a particular address in the memory. when you
>change the value of i, the value contained at that memory location changes
>but the program still refers to variable i through that memory location
>only.
>
>cheers
>asif
>
>On Fri, 19 Oct 2001, sasidhar p wrote:
>
> > Hi,
> >    The result of the following program is surprising me...
> >
> > main()
> > {
> >     int pid;
> >     int i = 5;
> >
> >     switch (pid = fork()) {
> >          case 0 : {
> >                         i = 7;
> >                         printf("In child address of i = %p \n",&i);
> >                       } break;
> >          case -1 : printf("Fork error \n"); break;
> >          default : printf("In parent address of i = %p\n",&i);
> >     }
> > }
> >
> > Out put on my m/c:
> >
> > In parent address of i = effffa68
> > In child address of i = effffa68
> >
> > Problem : I was expecting that the addresses shold be different because
>fork
> > creates a new process.  But the o/p is both addresses are same.
> >
> > Question: Why is this so?
> >
> > Thanx,
> > Sasi.
> >
> >
> > _________________________________________________________________
> > Get your FREE download of MSN Explorer at 
>http://explorer.msn.com/intl.asp
> >
> > _______________________________________________
> > This is the Linux C Programming List
> > :  http://lists.linux.org.au/listinfo/linuxcprogramming List
> >
>
>_______________________________________________
>This is the Linux C Programming List
>:  http://lists.linux.org.au/listinfo/linuxcprogramming List
>_______________________________________________
>This is the Linux C Programming List
>:  http://lists.linux.org.au/listinfo/linuxcprogramming List


_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp




More information about the linuxCprogramming mailing list