当前位置:   article > 正文

工作记录:删除文件,空间不释放_php释放磁盘

php释放磁盘

某一天,程序写日志把磁盘给写满了。原因一是程序有死循环,写日志太多了;二是即使用rm把文件删掉了,也没释放空间。

要说的就是第二个原因,算是又学习到一个新的东西。

我们来简单重现下:

1、写一个test

  1. <?php
  2. $a = '111';
  3. $f = fopen('1.txt', 'a+');
  4. while(1){
  5. fwrite($f, $a);
  6. sleep(1);
  7. }
执行这个程序,它会在本地产生一个1.txt文件,且会一直往里面写。

2、使用ps命令查看,会有进程

8214  8184  0 21:43 pts/0    00:00:00 php test.php

3、我们把1.txt文件删除,会发现8214这个进程还存在

4、使用lsof -p 8214命令查看其打开的文件,在最后一行会看见

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME

php     8214 xxxxx    3u   REG  202,1     1896 248330 /home/xxxxx/1.txt (deleted)

发现其还在写入,SIZE还在不断上升,为什么呢?

这是因为:当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。

5、只能删掉该进程


当然,现在写日志都是按时间来新建文件的,而不是一直往一个文件里写。所以,一般也不会出现这种情况。


参考:(lsof命令详解)http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316599.html

http://blog.163.com/aprilthirty60@126/blog/static/88613578201282703952163/    

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/853220
推荐阅读
相关标签
  

闽ICP备14008679号