免费注册 查看新帖 |

Chinaunix

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

fork产生的子进程如何才能不继承父进程打开的文件描述符? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-31 13:33 |只看该作者 |倒序浏览
写了一个进程控制程序, 用来管理一堆子进程, 不过遇到一个头疼的问题。 就是父进程打开的文件描述符, 子进程会继承, 有没有办法避免?

论坛徽章:
0
2 [报告]
发表于 2008-10-31 14:25 |只看该作者
如果不想用,关掉 不就可以了

论坛徽章:
0
3 [报告]
发表于 2008-10-31 14:52 |只看该作者

回复 #2 vfdff 的帖子

关闭只能在子进程里面关闭, 夫进程要用这些文件, 还有个问题有些是用fopen打开的, 不好知道这些文件的fd

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2008-10-31 15:08 |只看该作者
原帖由 funix_zjx 于 2008-10-31 14:52 发表
还有个问题有些是用fopen打开的, 不好知道这些文件的fd

man 3 fileno

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
5 [报告]
发表于 2008-10-31 17:35 |只看该作者
原帖由 funix_zjx 于 2008-10-31 14:52 发表
关闭只能在子进程里面关闭, 夫进程要用这些文件, 还有个问题有些是用fopen打开的, 不好知道这些文件的fd

直接用fclose,效果不变。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
6 [报告]
发表于 2008-10-31 22:16 |只看该作者

回复 #1 funix_zjx 的帖子

直接关闭,子进程拷贝的是父进程的副本,关了又不会影响父进程。

论坛徽章:
0
7 [报告]
发表于 2008-11-10 10:28 |只看该作者
关闭所有的文件描述符:

for   (int   i   =   0;   i   <   sysconf(_SC_OPEN_MAX);   i++)  
      close(i);

可以适当地调整以上的循环, 例如如果需要, 可以不关闭标准输入, 输出和出错

论坛徽章:
30
摩羯座
日期:2013-12-23 17:28:38牛市纪念徽章
日期:2015-07-13 11:35:582022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:57青铜圣斗士
日期:2015-11-27 17:45:3815-16赛季CBA联赛之天津
日期:2016-02-15 13:44:3615-16赛季CBA联赛之江苏
日期:2018-05-02 16:56:2715-16赛季CBA联赛之辽宁
日期:2018-08-08 13:41:1015-16赛季CBA联赛之深圳
日期:2018-10-02 18:05:0315-16赛季CBA联赛之天津
日期:2019-05-31 15:05:0615-16赛季CBA联赛之北京
日期:2022-06-30 13:34:1115-16赛季CBA联赛之同曦
日期:2022-07-06 19:33:5415-16赛季CBA联赛之吉林
日期:2022-12-28 14:16:22
8 [报告]
发表于 2008-11-10 10:48 |只看该作者
ls正解

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2008-11-10 12:16 |只看该作者
这个问题最好的解决方法应该是 fork 或类似系统调用提供对应的参数,指定哪些资源共享、哪些复制,等等。

论坛徽章:
0
10 [报告]
发表于 2008-11-10 13:15 |只看该作者
直接在子进程里面关掉就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP