Limpa os arquivos depois que um processo morre

0

Eu tenho um aplicativo que faz um monte de bifurcações, e cada fork usa bastante espaço em disco temporário. Atualmente, todo esse espaço é usado em / tmp. Por várias razões, eu quero limpar esses arquivos tmp o mais cedo possível depois que o processo morre, de preferência instantaneamente.

O problema é que em muitos casos, o proc é terminado irregularmente; Portanto, o processo em si não deve ser responsável pela limpeza de seus arquivos tmp. Qual seria uma boa maneira de configurar isso para que os arquivos tmp sejam removidos quando o processo morrer?

Eu estava pensando em gravar arquivos em / tmp / myapp / $ pid / e ter um cron job a cada segundo que procura diretórios / tmp / myapp / $ pid / e desvincula aqueles para os quais não há nenhum ativo processo com esse ID. Mas isso pode criar muita sobrecarga. Também por diversão eu tentei se eu pudesse colocar o dir dentro do proc mkdir /proc/12345/tmp mas isso não voa também: -)

    
por Jeroen 26.04.2012 / 00:06

1 resposta

1

Se você tiver acesso ao código fonte, você pode usar a função tmpfile() para criar um arquivo temporário "anônimo" - um arquivo é criado e imediatamente desvinculado - o aplicativo pode gravar nele, mas assim que o arquivo é fechado o espaço ocupado pelo arquivo é liberado. Esta é uma maneira comum de criar arquivos temporários no Unix, como eu entendo.

% bl0ck_qu0te%

Se você não tiver acesso ao código-fonte, tente excluir apenas tudo de /tmp/myapp/$pid/ periodicamente - o processo ainda será capaz de gravar no arquivo, mesmo que esteja desvinculado de o diretório, mas novamente o espaço em disco será liberado assim que o último identificador de arquivo for fechado.

As abordagens acima não funcionariam se algum arquivo temporário fosse aberto, fechado e aberto novamente ou se fosse usado por vários processos.

Pergunta relacionada em stackoverflow: link

    
por Sergey 26.04.2012 / 02:57