免费注册 查看新帖 |

Chinaunix

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

[进程管理] 新创建进程的时候,文件描述符表是什么时候清空的啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-03 15:22 |只看该作者 |倒序浏览
求助各位大神

最近在看文件描述符相关的问题,有一点想不通:
1、新建一个子进程的时候调用内核do_fork-->copy_process-->copy_files-->dup_fd,在dup_fd函数中对父进程的files_struct  files 结构体进行了完全复制,这样子进程就拥有和父进程一样的文件描述符表,此时子进程是可以对父进程打开的文件进行操作的;
2、然后子进程调用exec系列函数,函数最终掉用do_execve_common--->unshared_files-->unshared_fd-->dup_fd,在dup_fd函数中对子进程的files_struct  files 结构体进行了完全复制,也就是说调用exec系列函数之后抛弃了之前复制的父进程的files_struct结构,又生成了一个新的files_struct,但是仍然没有对文件描述符表的清空操作;

那么问题是:整个子进程创建过程中都没有对文件描述符表的清空操作吗?那么子进程即使调用了exec,还是可以打开父进程的文件啊?

而且子进程再申请文件描述符的时候,申请的fd不是从3开始,而是延续父进程的序号(好比父进程已经打开两个文件),返回fd= 5,这样应该不对吧?


求大牛指点!

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
2 [报告]
发表于 2015-04-07 09:41 |只看该作者
应该不是吧,貌似是由FD_CLOEXEC来控制的。

论坛徽章:
0
3 [报告]
发表于 2015-04-17 09:20 |只看该作者
nswcfd 发表于 2015-04-07 09:41
应该不是吧,貌似是由FD_CLOEXEC来控制的。



谢谢,确实是这样
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP