Linux

execve 之後程序的文件結構會發生什麼

  • July 7, 2022

如果我正確理解了手冊頁,則 fork 和 execve 程序的 fd 表將被複製到子程序並在 execve 中繼續存在。另一方面,任何其他記憶體映射都在 execve 之後被銷毀。

因此,當 proc 執行此操作(forks 和 execves)時,我會刪除要刪除的文件結構。

儘管如此,我還是在我大學的教科書中找到了一個例子:“如果 10 個程序打開一個文件,然後其中一半分叉而另一半被執行,那麼核心中會有多少個文件結構?”

答案是 10“因為孩子們共享文件結構。”

但是,我認為它會是 5,因為 execved 的 procs 會破壞它們的文件結構

那麼,這是否意味著文件結構在執行後仍保留在核心中?

鑑於打開的文件描述符execve在. 否則核心將無法確定仍然打開的文件描述符對應的內容。execve``execve

您教科書的問題是關於核心維護的打開文件描述符,而不是程序維護的任何內部資料結構。所以教科書的答案是正確的(因為文件描述符沒有被fork或execve破壞)核心中的文件結構沒有被破壞。

這與程序創建的內部資料結構不同,該結構用於保留有關通過打開描述符可用的文件以及通過它們讀取/寫入的數據的資訊。取決於 fork 或 execve 呼叫,程序內部的這些數據可能存在也可能不存在。

引用自:https://unix.stackexchange.com/questions/709022