假设有进程P持续向文件F写入数据,此时把文件F删除,进程P的写入会失败吗?磁盘占用是否会持续增加?为什么?
工具/原料
Linux系统
答案
1、进程P的写入不会失败,磁盘的占用仍然会增加下面小编从理论和实践方面讲一下
实践
1、写个python文件,终端运行当做一个写入的进程(桌面创建好了test_write.txt)
2、过程中删除test_write.txt文件,查看进程是否异常,结果终端正常输出write it once,另外打开一命令行窗口查看进程如下(正常写入:进程的时间在增加表示没有中断)
3、删除txt文件以后,查看一下磁盘占用是否还在持续增加,结果确实增加了(如图)
理论
1、stackoverflow:如果文件被移动(在相同的文件系统中)或重命名,则文件句柄保持打开状态,仍可用于读取和写入文件。如果文件被删除,文件句柄仍然是打开的,仍然可以使用(这不是一些人所期望的)。在最后一个句柄关闭之前,不会真正删除该文件。如果文件被新文件替换,则具体取决于文件。如果文件的内容被覆盖,文件句柄仍然有效并访问新内容。如果现有文件被取消链接并且使用相同名称创建新文件,或者如果使用新文件移动到现有文件上rename(),则它与删除相同(参见上文) - 也就是说,文件句柄将继续引用该文件的原始版本。通常,一旦文件打开,文件就会打开,没有人改变目录结构可以改变它 - 它们可以移动,重命名文件,或者在其位置放置其他东西,它只是保持打开状态。在Unix中,没有删除,unlink()这是有意义的,因为它不一定删除文件 - 只是从目录中删除链接
2、个人简单理解:可能文件系统实现了path到真实资源的一个映射,open操作占有了真实资源的句柄,删除操作会删除path到真实资源的映射,但原有的句柄还在。等所有的句柄都关闭了,文件系统再做真正的删除。具体还得详细地看文件系统的实现代码了。