设想:
- 创建一个随机文件(本例中为 1024M)
dd if=/dev/zero of=file bs=1M count=1024
- 开始下载 (
curl src > /dev/null
) - 从服务器上删除文件
- Curl 仍在下载
100%, 1024M
这怎么可能呢,如果文件是服务器上删除了吗?
服务器有512M
RAM 和不SWAP,文件不可能全部读取到 RAM。因此,它一定是在某个时刻从磁盘读取的。但是,文件在下载过程中停止存在,那么 nginx 怎么还允许人们继续下载呢?
答案1
下载开始后,Web 服务器会打开源文件,直到所有数据发送完毕才会关闭。删除文件不会阻止打开该文件的进程读取和写入文件。只有进程关闭文件后,内核才会删除该文件。
答案2
正确:当链接计数变为 0 并且没有进程打开文件时,数据块(和 inode)被释放。