如果我正确理解了手册页,则 fork 和 execve 进程的 fd 表将被复制到子进程并在 execve 中继续存在。另一方面,任何其他内存映射都在 execve 之后被销毁。
因此,当 proc 执行此操作(forks 和 execves)时,我会删除要删除的文件结构。
尽管如此,我还是在我大学的教科书中找到了一个例子:“如果 10 个进程打开一个文件,然后其中一半分叉而另一半被执行,那么内核中会有多少个文件结构?”
答案是 10“因为孩子们共享文件结构。”
但是,我认为它会是 5,因为 execved 的 procs 会破坏它们的文件结构
那么,这是否意味着文件结构在执行后仍保留在内核中?
鉴于打开的文件描述符
execve
在. 否则内核将无法确定仍然打开的文件描述符对应的内容。execve
execve
您教科书的问题是关于内核维护的打开文件描述符,而不是进程维护的任何内部数据结构。所以教科书的答案是正确的(因为文件描述符没有被fork或execve破坏)内核中的文件结构没有被破坏。
这与进程创建的内部数据结构不同,该结构用于保留有关通过打开描述符可用的文件以及通过它们读取/写入的数据的信息。取决于 fork 或 execve 调用,进程内部的这些数据可能存在也可能不存在。