为什么 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 或其他方式。 (不确定它到底如何读取文件,但重点是它不会保持文件打开。)
此后它会继续轮询以检查它是否已更改。并在写入时重新打开。