Re: what will connect the fork() with its following code ? a simple example below:

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



fork returns 0 to the child and the pid of the child to the parent.

both child and parent get the same code, so the child gets true in the if-statement and the parent gets false.

it would be the same as

pid = fork();
if (pid == 0){
// child
}
else{
// parent
}


----- Original Message ----- From: "Sat." <[email protected]>
To: "Dirk Gerdes" <[email protected]>
Cc: <[email protected]>
Sent: Tuesday, September 06, 2005 1:59 PM
Subject: Re: what will connect the fork() with its following code ? a simple example below:


here is a snip in 0.11 version linux ,
in linux/init/main.c


179 if (!(pid=fork())) {
180 close(0);
181 if (open( "/etc/rc",O_RDONLY,0))
182 _exit(1);
183 execve( "/bin/sh",argv_rc,envp_rc);
184 _exit(2);
185 }

natually, the code from 180 to 184 is runned by the new process, what
I can understand is why the new process know that the next code will
run is close(0) and why it know It will end at line 184 ?

so ,I feel that there should be some connection between  them . but
what the relationship in depth is ?

thanks your help :)


2005/9/6, Dirk Gerdes <[email protected]>:
There is no connection between a child an its parent.
The child only gets a copy of the code.
If there were a pointer to a child or to the parent, you wouldn't need any
signals.
The processes could communicate directly.

regards

----- Original Message -----
From: "Sat." <[email protected]>
To: <[email protected]>
Sent: Tuesday, September 06, 2005 11:15 AM
Subject: what will connect the fork() with its following code ? a simple
example below:


> if(!(pid=fork())){
>     ......
>     printk("in child process");
>     ......
> }else{
>     .....
>     printk("in father process");
>     .....
> }
>
> this is a classical example, when the fork() system call runs, it will
> build a new process and active it . while the schedule() select the
> new process it will run. this is rather normal.
>
> but there is always a confusion in my minds.
> because , sys_fork() only copies father process and configure some new
> values., and do nothing . so the bridge  between the new process and
> its following code, printk("in child process"), seems disappear . so I
> always believe that the new process should have a pointer which point
> the code "printk("in child process");". except this , there are not
> any connection between them ?
>
> very confused :(
>
> any help will  appreciate  !
>
>
>
> --
> Sat.
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" > in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>




--
Sat.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux