对于fork的一点理解:
先看实例:
#include<unistd.h>
int main()
{
pid_t pid;
pid=fork();
if(pid<0)
{
printf("error in fork ");
}
else
if(pid==0)
printf("i am the child process ,my id is %d \n",getpid());
else
printf("i am the parent process ,my id is %d \n",getpid());
return 0;
}
问题:
1.如何看待这个程序,这个程序中有哪些代码是属于父进程的???
2.这个整体是谁的??? 子进程的代码段的内容是什么??
3.
是不是父进程执行到哪里,子进程也从哪里开始执行???:
以下是一些核心:
1.内核会复制一个与父进程完全相同的子进程。
2.父、子进程的PC即:指令指针寄存器完全相同。
3.新进程和原有进程的可执行程序是同一个程序、同一上下文、和同一数据,但它们是两个完全独立的进程。
4.指令指针寄存器决定了指令从哪里开始执行。
5.二者不同的是: 返回值pid ,父进程中返回的是子进程的pid ,子进程的进程空间中pid 变量,得到的返回值是 0
即:两个进程的指令内容完全一样,只不过pid得到的返回值不同。
先看实例:
#include<unistd.h>
int main()
{
pid_t pid;
pid=fork();
if(pid<0)
{
printf("error in fork ");
}
else
if(pid==0)
printf("i am the child process ,my id is %d \n",getpid());
else
printf("i am the parent process ,my id is %d \n",getpid());
return 0;
}
问题:
1.如何看待这个程序,这个程序中有哪些代码是属于父进程的???
2.这个整体是谁的??? 子进程的代码段的内容是什么??
3.
是不是父进程执行到哪里,子进程也从哪里开始执行???:
以下是一些核心:
1.内核会复制一个与父进程完全相同的子进程。
2.父、子进程的PC即:指令指针寄存器完全相同。
3.新进程和原有进程的可执行程序是同一个程序、同一上下文、和同一数据,但它们是两个完全独立的进程。
4.指令指针寄存器决定了指令从哪里开始执行。
5.二者不同的是: 返回值pid ,父进程中返回的是子进程的pid ,子进程的进程空间中pid 变量,得到的返回值是 0
即:两个进程的指令内容完全一样,只不过pid得到的返回值不同。