【发布时间】:2014-04-12 16:40:00
【问题描述】:
我有一个大型程序。它非常喜欢打开文件(与它们一起工作,数量可能很大 - 超过 10k )。在某个时候,我想产生一个可以过自己的生活的子进程(进程外网络浏览器)。由于其大小(> 10GB 的代码)和第三方(以及插件)依赖项,我无法控制谁以及如何在我的主程序中创建文件。我想要:
- 默认为 O_CLOEXEC / FD_CLOEXEC。我怀疑没有这种能力。或者
- 一种枚举所有文件(套接字、管道等)描述符以便能够在 fork 后关闭它们的方法。感兴趣的操作系统:Mac OS X 和 Linux。
【问题讨论】:
-
“我无法控制谁以及如何在我的主程序中创建文件”。你能解释清楚一点吗?
-
有时只是糟糕的代码,像网络和磁盘这样的几个域。大量的图书馆,其中一些是第三方的。也就是说,如果我在某个库的帮助下打开文件,我无法控制文件在其中的打开方式,因此无法设置 FD_CLOEXEC 标志。
-
让你的程序维护一个你确实想要保持打开的fds的小列表,并关闭所有fds,除了这个列表中的那些。