5

in Linux 2.6.27:

From "lsof" output I see a process holding open fd with a (deleted) file. The strange thing is that I can still see the file in the file system using "ls". Why is that?

thanks.

user1783732
  • 1,599
  • 5
  • 22
  • 44

2 Answers2

6

The file is not deleted as long as some process has the file open. When a file is closed, the kernel first checks the count of the number of process that have the file open. If this count has reached 0, the kernel then checks the link count; if it is 0, the file's contents are deleted.

To quote from man unlink:

If the name was the last link to a file but any processes still have the file open the file will remain in existence until the last file descriptor referring to it is closed.

mohit
  • 5,696
  • 3
  • 24
  • 37
  • That says unlink always removes the name, and sometimes deletes the file. If you can see the file in `ls`, the name hasn't been removed. So that's not what's going on. You can test this by opening a file in one process, then deleting it in another and doing `ls`. – philh Aug 30 '16 at 09:30
6

When a file is deleted it would not been seen on the file system. However, it is quite possible another file with the same file name is created on the same location.

You can check the node number shown in lsof and ls -i to check whether they are really the same file.

fefe
  • 3,342
  • 2
  • 23
  • 45