当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 问一个关于父子进程的基础问题
帖子发表于 : 2007-10-24 21:29 

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


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-10-24 21:42 
头像

注册: 2007-03-13 17:26
帖子: 2254
送出感谢: 0 次
接收感谢: 1
就是fork 返回之处


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-10-24 21:45 
头像

注册: 2006-10-16 7:24
帖子: 624
地址: 安康/西安/广州
送出感谢: 0 次
接收感谢: 0 次
对fork后,父子进程都继续向下,如果没有exec的话。

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


_________________
读书取正,读易取变,读骚取幽,读庄取达,读汉文取坚,最有味卷中岁月。
与菊同野,与梅同疏,与莲同洁,与兰同芳,与海棠同韵,定自称花里神仙。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-10-24 21:50 
头像

注册: 2006-05-12 23:28
帖子: 621
地址: 江西乐平
送出感谢: 0 次
接收感谢: 1
Amankwah 写道:
对fork后,父子进程都继续向下,如果没有exec的话。

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


主要就是因为这个,在Linux下创建进程的开销很小,在Lin下编程通常用多进程而不是多线程。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译