/proc/PID/fd/ 中的文件描述符的符号链接保存多长时间?
在整个过程的生命周期中?
当这是一个多线程进程时会怎么样?
我能否保证经过几个小时的工作后,所有在某个时间点打开的文件都会列在这里?目前,这里的链接都从 0 到 n 编号,中间没有缺少的数字。会出现缺少数字的情况吗?或者文件只是在同一个点消失,没有任何迹象表明它曾经被打开过?
谢谢。
答案1
文件系统/proc
是虚拟的——它反映了当前状态进程,并且/proc/$pid/fd
仅列出进程当前保持打开的文件。如果文件或套接字关闭,其下的条目/proc/$pid/fd/
将自动消失。如果进程退出,整个/proc/$pid
目录将消失。
文件描述符总是从 0 开始,内核总是分配尽可能低新创建的文件描述符的非负数。但是,进程始终可以关闭其拥有的任何文件描述符 - 因此完全有可能fd/
包含“漏洞”;例如fd/0 fd/1 fd/3 fd/6
或类似情况。
对于多线程进程,/proc/$pid
显示主线程的状态 - 其他线程在其下有子目录/proc/$pid/task/
(一个任务代表一个 Pthread)。但是,POSIX.1 要求进程内的所有 Pthread 共享相同的文件描述符,因此的内容fd/
将相同。