我有一个应用程序,它执行大量分叉,每次分叉都会占用大量临时磁盘空间。目前,所有这些空间都用于 /tmp。出于各种原因,我希望在进程终止后尽快清理这些临时文件,最好是立即清理。
问题是,在许多情况下,proc 会不定期终止;因此,进程本身不应负责清理其 tmp 文件。有什么好方法可以设置该设置,以便在进程终止时删除 tmp 文件?
我考虑将文件写入 /tmp/myapp/$pid/,然后每隔一秒左右执行一次 cron 作业,搜索目录 /tmp/myapp/$pid/ 并取消链接没有该 ID 的活动进程的目录。但这可能会产生很多开销。另外,为了好玩,我尝试过是否可以将目录放入 proc 中,mkdir /proc/12345/tmp
但这也不行 :-)
答案1
如果您有权访问源代码,则可以使用tmpfile()
函数创建一个“匿名”临时文件 - 创建一个文件并立即取消链接 - 应用程序可以写入该文件,但一旦关闭该文件,该文件占用的空间就会被释放。据我所知,这是在 Unix 中创建临时文件的常用方法。
概要
#include <stdio.h> FILE *tmpfile(void);
描述
The tmpfile() function opens a unique temporary file in binary read/write (w+b) mode. The file will be automatically deleted when it is closed or the program terminates.
如果你无法访问源代码,你可以尝试删除一切定期/tmp/myapp/$pid/
- 即使文件与目录取消链接,进程仍然能够写入文件,但是一旦最后一个文件句柄关闭,磁盘空间就会被释放。
如果任何临时文件被打开、关闭然后再次打开,或者被多个进程使用,则上述方法将不起作用。
stackoverflow 上的相关问题:https://stackoverflow.com/questions/9889277/how-to-create-temporary-files-on-linux-that-will-automatically-clean-up-after-th