У меня есть приложение, которое много разветвляется, и каждая ветвь использует довольно много места на временном диске. В настоящее время все это пространство используется в / tmp. По разным причинам я хочу очистить эти tmp-файлы как можно скорее после того, как процесс завершится, желательно немедленно.
Проблема в том, что во многих случаях процедура прекращается нерегулярно; следовательно, сам процесс не должен отвечать за очистку своих файлов tmp. Что было бы хорошим способом настроить это так, чтобы tmp-файлы удалялись, когда процесс умирал?
Я думал о записи файлов в / tmp / myapp / $ pid /, а затем каждую секунду выполнял задание cron. или так, что ищет каталоги / tmp / myapp / $ pid / и отменяет связь с теми, для которых нет активного процесса с этим идентификатором. Но это может создать много накладных расходов. Также для забавы я попытался, если бы я мог на самом деле положить DIR внутри Proc mkdir /proc/12345/tmp
, но это тоже не летает: -)
Если у вас есть доступ к исходному коду, вы можете использовать функцию tmpfile()
для создания «аномального» временного файла - файл создается и сразу связывается - приложение может записать в него, но как только файл закрыто пространство, занимаемое файлом освобождается. Как я понимаю, это распространенный способ создания временных файлов в Unix.
ОПИСАНИЕ
#include <stdio.h> FILE *tmpfile(void);
ОПИСАНИЕ
blockquote>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-teditional-files-on-linux-that-will-automatics-clean-up-after-th