Mag*_*nus 17 unix process filehandle
如何查找进程中的所有打开文件(来自内部)?
在fork()
(之前exec()
)之后知道这似乎很有用.
我知道它的存在性getdtablesize()
和可移植性sysconf(_SC_OPEN_MAX)
,但是尝试关闭每个有效的文件描述符似乎效率低下,无论是否有一个打开的文件.(我也意识到过早优化的危险,这更多是关于美学我猜:-)
如果你的程序将调用fork
和exec
,你真的应该打开所有的文件描述符与O_CLOEXEC
标志,所以你不必之前,需要手动关闭它们exec
.您还可以fcntl
在打开文件后使用此标志添加此标志,但这受多线程程序中的竞争条件的影响.
尝试关闭所有文件描述符可能听起来效率低,但实际上并没有那么糟糕.如果系统是好的,系统调用实现来查找文件描述符应该是相当有效的.
如果要查找仅关闭打开的文件描述符,可以在存在的系统上使用proc文件系统.例如,在Linux上,/ proc/self/fd将列出所有打开的文件描述符.迭代该目录,并关闭所有> 2,排除表示您正在迭代的目录的文件描述符.