【发布时间】:2015-09-14 22:51:18
【问题描述】:
我遇到了this 和this 关于删除 linux 中打开的文件的问题
但是,当一个进程(称为 A)删除另一个进程 B 打开的文件时,我仍然对 RAM 中发生的情况感到困惑。
让我感到困惑的是(我的分析可能是错误的,如果是,请纠正我):
- 当进程打开文件时,会在 UFDT 中为该文件创建一个新条目。
- 当一个进程删除一个文件时,该文件的所有链接都消失了
特别是,我们没有引用它的
inode,因此,它从 GFDT 中删除了 - 但是,当修改文件时(比如写入文件),它必须在磁盘中更新(因为它的页面被修改/变脏),但由于较早的删除,它在 GFDT 中没有引用,所以我们不不知道
inode。
问题是为什么打开它的进程仍然可以访问“已删除”文件? 以及操作系统是如何做到这一点的?
EDIT UFDT 我的意思是进程的文件描述符表,其中包含进程打开的文件的文件描述符(每个进程都有自己的 UFDT)而 GFDT 是全局文件描述符表,系统中只有一个 GFDT(在我们的例子中是 RAM)。
【问题讨论】: