linux中文件句柄泄露

1.文件句柄泄露

         在linux中,如果一个文件正在被某个进程占用,用户操作rm删除该文件后,我们ls后发现文件已经不存在了,但实际上该文件仍然在磁盘上。直到使用它的进程退出后,文件占用的磁盘空间才会被释放。

        其原理如下:

         在linux中,每个文件都有2个计数器,i_count和i_nlink。i_count表示文件正在被调用的数量。i_nlink表示硬链接的数量。可以理解为i_count为内存的引用计数器,i_nlink为磁盘的引用计数器。当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增加。

       rm操作是将文件的i_nlink减少了,如果没有其它的硬链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。

       备注,在这种情况下,就需要使用lsof工具来查看文件被进程的占用情况了。

你可能感兴趣的:(Linux)