分页: 1 / 1

问一个关于父子进程的基础问题

发表于 : 2007-10-24 21:29
supsper
不知道这样理解是否正确:
首先,系统让新的进程与旧的进程使用同一个代码段,它们的程序还是相同的,对于数据段和堆栈
段,系统则复制一份给新的进程,这样,父进程的所有数据都可以留给子进程,但是,子进程一旦开始运行,
虽然它继承了父进程的一切数据(当然还是有不同的),但实际上数据却已经分开,相互之间不再有影响
了,也就是说,它们之间不 再共享任何数据了。例如:
main(){
....
if(fork()){,,,exit(0);}
else{。。。。exit(0);}
....
}
是否在main中fork后运行子进程(返回一个正数pid),由于在子进程fork(返回0),所以执行else{.。。。}
子进程结束后执行if(fork()){。。。}
我的问题是,子进程到底从那里执行,是fork()调用处 ??

发表于 : 2007-10-24 21:42
windwiny
就是fork 返回之处

发表于 : 2007-10-24 21:45
Amankwah
对fork后,父子进程都继续向下,如果没有exec的话。

另外,linux的父子进程是“写时复制”的,也就是说,如果父子都不写的话,所有的段都是映射在同样的物理页的,写哪一页才复制哪一页。

发表于 : 2007-10-24 21:50
FFFrog
Amankwah 写了:对fork后,父子进程都继续向下,如果没有exec的话。

另外,linux的父子进程是“写时复制”的,也就是说,如果父子都不写的话,所有的段都是映射在同样的物理页的,写哪一页才复制哪一页。
主要就是因为这个,在Linux下创建进程的开销很小,在Lin下编程通常用多进程而不是多线程。