删除正在使用的文件

Mau*_*ldi 5 concurrency files

我有一个接收视频文件 (RAW) 并使用FFMPEG对其进行转码的过程,生成三个(不同的分辨率)结果文件。我正在使用分布式任务队列系统 ( Celery ) 在不同的异步任务中处理来自 FFMPEG 的每个进程。

三个任务按流程运行

  • 转换视频
  • 将结果上传到云中的存储桶
  • 删除结果

最后一个任务是将 RAW 视频(用于转码)上传到存储桶,然后将其删除。

如果我异步启动三个任务,然后删除RAW文件,是否会因为删除文件而中断(使用RAW文件的)任务?

PS:我假设RAW文件加载到内存中,打开3次,转码任务开始。

Lam*_*ert 8

完整的 RAW 文件在内存中的假设是不正确的。通常,当打开文件时,进程会获得一个文件描述符,该描述符可用于读/写文件。

当文件被进程打开然后在文件仍然打开时被删除时,实际上并不会立即删除文件。当不再有具有该文件句柄(文件描述符)的进程时,该文件实际上被删除。您可以使用lsof查看该文件是否仍然具有句柄,并且当您删除此类文件时,它通常会与(deleted)附加到该行的文本一起列出。

删除打开的文件时也不会回收磁盘空间,因此只要文件处于打开状态,仍然可以安全地使用该文件。当删除的文件不再具有活动文件描述符时,文件系统将回收消耗的磁盘空间。