已删除的文件仍处于打开状态,占用了巨大的磁盘空间



我正在运行java进程。但这会消耗大量的磁盘空间来保持一些已删除文件的打开状态。文件的位置是/tmp(即,当我不是专门创建这些文件时)。发生这种情况的原因是什么?如何克服?

例如,在Linux上,当一个进程仍在使用一个文件,而另一个进程删除该文件时,就会发生这种情况。文件将显示为已删除,但在后台,只要任何进程仍在使用文件描述符,内核就不会释放空间。

要释放空间,您必须告诉程序关闭文件描述符。这完全取决于程序设计,甚至可能是不可能的。例如,如果这是一个文字处理器,您可以在主菜单中选择"文件"->"关闭"。

如果您无法"告诉"程序关闭文件,您的最终选择是终止该过程。

如果您喜欢四处玩耍,还可以使用调试器(如gdb)附加到进程,找到描述符并手动关闭它。请注意,这可能会导致程序崩溃或出现意外行为。

在所有文件突然关闭的情况下,其内容都可能被损坏。

我不认为这会在Windows上发生,因为Windows使用不同的锁定语义,并且如果文件打开,将不允许删除。

最新更新