用户进程是否为可执行文件本身和共享库保留文件描述符?例如,如果我查看/proc/PID/fd
of ,除了//之外bash
,我预计至少会看到以下内容:fd
stdin
stdout
stderr
- 一个为
/usr/bin/bash
- 一份用于
/usr/lib/XXX/libc-2.XX.so
文件。
根据核函数load_elf_binary
,似乎确实是fd
至少为可执行文件分配了 a 的情况。
然而,实际上我在文件夹中没有找到这样的fd
s /proc/PID/fd
,可能是因为它们不存在于task_struct->files->fd_array
.所以问题是:
- 内核是否
file
在每个进程的结构(例如task_struct
/ )中存储指向与可执行文件和共享库相对应的对象的指针thread_info
? - 如果是这样,哪个结构?
答案1
不,一般来说没有这些东西的文件描述符。但是,它会向/proc/PID/exe
您显示正在运行的二进制文件,并且/proc/PID/maps
会/proc/PID/map_files/
向您显示映射到何处的内容。而且,即使这些东西不存在,内核仍然可以跟踪它。并非内核内存中的所有内容都通过/proc
.