关闭的过程

问题描述:

如何查找进程中的所有打开的文件(从内本身)所有打开的文件?关闭的过程

这似乎很有用后知道fork()exec()之前)。

我知道getdtablesize()的存及其更便携sysconf(_SC_OPEN_MAX)的,但似乎效率不高,试图关闭每有效文件描述符,是否有背后或不打开的文件。 (我也知道过早优化的危险,这是更多的美学我猜:-)

现有的机制是特定于平台。 See this answer

这听起来低效尝试关闭所有的文件描述符,但它实际上并不坏。系统调用实现来查找文件描述符应该是相当有效的,如果系统是好的。

如果你想找到只关闭打开的文件描述符,你可以使用它存在系统proc文件系统。例如。在Linux上,/ proc/self/fd将列出所有打开的文件描述符。迭代该目录,并关闭所有> 2,不包括表示正在迭代的目录的文件描述符。

如果你的程序将调用forkexec,你真的应该打开所有的文件描述符与O_CLOEXEC标志,所以你不必exec之前,需要手动关闭它们。在打开文件后,您还可以使用fcntl添加此标志,但这受多线程程序中的竞争条件影响。

+0

欢迎的比赛。 – ybungalobill 2017-12-16 04:45:54