/proc/PID/fd 中可执行二进制文件和共享库的文件描述符?

/proc/PID/fd 中可执行二进制文件和共享库的文件描述符?

用户进程是否为可执行文件本身和共享库保留文件描述符?例如,如果我查看/proc/PID/fdof ,除了//之外bash,我预计至少会看到以下内容:fdstdinstdoutstderr

  1. 一个为/usr/bin/bash
  2. 一份用于/usr/lib/XXX/libc-2.XX.so文件。

根据核函数load_elf_binary,似乎确实是fd至少为可执行文件分配了 a 的情况。

然而,实际上我在文件夹中没有找到这样的fds /proc/PID/fd,可能是因为它们不存在于task_struct->files->fd_array.所以问题是:

  1. 内核是否file在每个进程的结构(例如task_struct/ )中存储指向与可执行文件和共享库相对应的对象的指针thread_info
  2. 如果是这样,哪个结构?

答案1

不,一般来说没有这些东西的文件描述符。但是,它会向/proc/PID/exe您显示正在运行的二进制文件,并且/proc/PID/maps/proc/PID/map_files/向您显示映射到何处的内容。而且,即使这些东西不存在,内核仍然可以跟踪它。并非内核内存中的所有内容都通过/proc.

相关内容