【发布时间】:2013-08-14 13:46:23
【问题描述】:
在 Linux 2.6.27 中:
从“lsof”输出中,我看到一个进程持有打开的 fd 和一个(已删除的)文件。奇怪的是我仍然可以使用“ls”在文件系统中看到该文件。这是为什么?
谢谢。
【问题讨论】:
在 Linux 2.6.27 中:
从“lsof”输出中,我看到一个进程持有打开的 fd 和一个(已删除的)文件。奇怪的是我仍然可以使用“ls”在文件系统中看到该文件。这是为什么?
谢谢。
【问题讨论】:
当一个文件被删除时,它不会在文件系统上看到。但是,很有可能在同一位置创建另一个具有相同文件名的文件。
您可以查看lsof和ls -i中显示的节点号,以确定它们是否真的是同一个文件。
【讨论】:
只要某个进程打开文件,文件就不会被删除。当文件关闭时,内核首先检查打开文件的进程数。如果此计数已达到 0,则内核将检查链接计数;如果为0,则删除文件内容。
引用unlink的人:
如果名称是文件的最后一个链接,但任何进程仍然有 文件打开文件将一直存在,直到最后一个文件 引用它的描述符已关闭。
【讨论】:
ls 中看到该文件,则该名称尚未被删除。所以这不是正在发生的事情。您可以通过在一个进程中打开一个文件,然后在另一个进程中将其删除并执行ls 来测试这一点。