Очистить файлы после того, как процесс умирает

У меня есть приложение, которое много разветвляется, и каждая ветвь использует довольно много места на временном диске. В настоящее время все это пространство используется в / tmp. По разным причинам я хочу очистить эти tmp-файлы как можно скорее после того, как процесс завершится, желательно немедленно.

Проблема в том, что во многих случаях процедура прекращается нерегулярно; следовательно, сам процесс не должен отвечать за очистку своих файлов tmp. Что было бы хорошим способом настроить это так, чтобы tmp-файлы удалялись, когда процесс умирал?

Я думал о записи файлов в / tmp / myapp / $ pid /, а затем каждую секунду выполнял задание cron. или так, что ищет каталоги / tmp / myapp / $ pid / и отменяет связь с теми, для которых нет активного процесса с этим идентификатором. Но это может создать много накладных расходов. Также для забавы я попытался, если бы я мог на самом деле положить DIR внутри Proc mkdir /proc/12345/tmp, но это тоже не летает: -)

0
задан 26 April 2012 в 02:06

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-teditional-files-on-linux-that-will-automatics-clean-up-after-th

0
ответ дан 26 April 2012 в 02:06

Другие вопросы по тегам:

Похожие вопросы: