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

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

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

Я думал о записи файлов в / tmp / myapp / $ pid /, а затем каждую секунду выполнял задание cron, которое ищет каталоги / tmp / myapp / $ pid / и отменяет связь с теми, для которых нет активного процесса с этим Я БЫ. Но это может создать много накладных расходов. Также для забавы я попытался, если бы я мог на самом деле положить DIR внутри 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

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