免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9277 | 回复: 14
打印 上一主题 下一主题

请教文件描述符标志FD_CLOEXEC设置怎样理解?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-24 13:13 |只看该作者 |倒序浏览
书上说“当子进程exec一个新的程序时,调用进程中打开的文件描述符仍然保持打开,但设置了执行即关FD_CLOEXEC的文件描述字除外。如果该标志设置,则描述字在exec时将被关闭。否则该描述字在exec后仍保持打开。”
  这句话是不是这样理解的:调用进程是指调用exec的那个子进程,如果在子进程中的某个文件描述字该标志设为了1,则子进程exec后该文件描述字就被关闭?否则就仍为打开???可是exec后子进程不就退出了吗???还有什么文件描述字没有关闭呢???不知道怎么理解??望高手解释下。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-11-24 13:40 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

>;>;可是exec后子进程不就退出了吗???
你都没理解exec的真正意思。
man exec

论坛徽章:
0
3 [报告]
发表于 2004-11-24 14:03 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

我也不太明白这个问题

论坛徽章:
0
4 [报告]
发表于 2004-11-24 14:07 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

是我说错了,应该是exec后新进程就退出了。
exec后,由新进程的地址空间替代调用进程的地址空间,对于原调用进程的地址空间会被释放掉。
那么所谓的调用进程中打开的文件描述字仍保持打开是指在exec的新进程中保持打开吗??(好像不对吧??)原进程都的地址空间都被释放了,还怎么保持这个文件描述字呢??
请lenovo版主赐教。谢谢。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-11-24 14:11 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

》》对于原调用进程的地址空间会被释放掉。
你从哪里理解的这句话?

》》那么所谓的调用进程中打开的文件描述字仍保持打开是指在exec的新进程中保持打开吗?
这个你的理解是对的,不要怀疑。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-11-24 14:20 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

吧exec看作是对原来进程的一个“注入”吧,没有另起一个,终止一个的说法。再说了,进程终止,进程的空间,也不叫“释放”啊!进程空间,这个概念要好好理解。

论坛徽章:
0
7 [报告]
发表于 2004-11-24 14:31 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

呵呵。首先谢谢大家的帮助。
我是在《unix环境高级编程》下看的说:
1。exec函数调用成功时系统将用一个新程序的地址空间替代调用进程的地址空间并装入新进程的内容;而对于老的地址空间如果是由fork创建的则释放,如果是由vfork创建的则返回老的地址空间给父进程。
2。exec用新程序的地址空间覆盖当前程序的地址空间时,它只覆盖正文段,数据段和栈段。

论坛徽章:
0
8 [报告]
发表于 2004-11-24 14:39 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

什么是新进程?就是exec一个程序(磁盘上的某个可执行程序,二进制的或脚本解释的),把这个可执行程序文件给load进内存,用它的text段、data段、stack段等替代fork()出来的那个进程,就是子进程,继承过来的那些。

总觉得好多人把进程跟程序搞混,其实区别很重要呢

论坛徽章:
0
9 [报告]
发表于 2004-11-24 14:53 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

albcamus兄所说的在操作系统教材里都明确讲过了,偶知道的说,那就是调用进程的栈段空间被覆盖了哦。
那原来调用进程的文件描述字变量所存放的栈空间(假设该文件描述字是个局部变量在进程的栈空间)不就被覆盖了吗??
然后又由于FD_CLOEXEC被设置为了0,则在exec的新进程中还存在这个文件描述字,怎么感觉像继承样的阿.

论坛徽章:
0
10 [报告]
发表于 2004-11-24 14:56 |只看该作者

请教文件描述符标志FD_CLOEXEC设置怎样理解??

打开的文件,操作系统要为每个进程维护一张表,不是简单的放在进程的Stack就完事儿啊。而且,stack、text、bss、data那些概念,都是用户进程空间的,进程还有系统空间啊,这个就不是它自个儿说了算的了:-)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP