lsof 丢失文件

lsof 丢失文件

为什么 lsof 无法列出我打开的文件。例如,我使用文本编辑器打开主目录中的某个文件。

$ gedit ~/.python_history

lsof甚至不能以 root 身份工作

$ sudo lsof | grep python_history

没有列出任何内容。为什么?

编辑和保存文件也没有什么区别。运行 python 解释器也没有什么区别。

$ lsof | grep gedit

确实列出了一堆文件,但没有列出我正在编辑的文件。

答案1

Gedit 将文件读入内存然后关闭文件句柄。通常:

open("/path/to/your/file", O_RDONLY|O_LARGEFILE|O_NOATIME) = 18
read(18, "blah blah blah"..., 4096) = 305
close(18)                           = 0

或一些 mmap 或其他方式。 (不确定它到底如何读取文件,但重点是它不会保持文件打开。)

此后它会继续轮询以检查它是否已更改。并在写入时重新打开。

相关内容