execve 后进程的文件结构会发生什么

execve 后进程的文件结构会发生什么

如果我正确理解了手册页,则 fork 和 execve 的进程的 fd 表将被复制到子进程并在 execve 中存活。另一方面,任何其他内存映射在 execve 之后都会被破坏。

因此,当过程执行此操作(forks 和 execves)时,我扩展了要删除的文件结构。

尽管如此,我在大学教科书中发现了一个例子,问: “如果 10 个进程打开一个文件,然后其中一半进行分叉,另一半执行,那么内核中会有多少个文件结构?”

答案是 10“因为孩子们共享文件结构。”

然而,我认为它会是 5,因为执行的过程会破坏它们的文件结构

那么,这是否意味着文件结构在执行后仍保留在内核中?

答案1

鉴于打开的文件描述符execveexecve.execve否则内核将无法找出仍然打开的文件描述符对应的内容。

答案2

您的教科书的问题是关于内核维护的打开文件描述符,而不是关于进程维护的任何内部数据结构。所以教科书的答案是正确的(因为文件描述符不会被 fork 或 execve 破坏)内核中的文件结构不会被破坏。

这与进程创建的内部数据结构不同,内部数据结构用于保留有关通过打开描述符可用的文件以及通过它们读取/写入的数据的信息。进程内部的这些数据可能会或可能不会保留,具体取决于 fork 或 execve 调用。

相关内容