具体来说,我想知道当我 rm 一个打开的文件并且没有明确地终止持有该文件的文件描述符的进程时会发生什么。系统关闭时该文件会被删除吗?
答案1
基本上是的 - 只要打开它的进程终止。此时不会发生任何“神奇”的事情。就像文件的目录条目是包含该文件数据的块的“硬链接”一样,打开的文件句柄也是如此。如果没有目录条目和打开的文件句柄,则可以自由重用这些块。这意味着即使您没有完全关机(例如拔掉电源线),文件仍将被删除 - 当您运行 rm 时它已被“删除”,只是它的块不能立即重用。
答案2
内核保持内存中文件 inode 的副本处于锁定状态,因此当一个进程打开文件时,属于该文件的数据块和 inode 无法释放。一旦文件确实关闭(系统关闭且进程被终止时会发生这种情况),所有块和 inode 都会被释放以供重新使用。这发生在文件系统可以卸载(如果文件系统有打开的文件,则无法卸载)和系统关闭之前。