Se você não conseguir matar seu aplicativo, poderá truncar em vez de excluir o arquivo de log para recuperar o espaço. Se o arquivo não estava aberto no modo de acréscimo (com O_APPEND
), o arquivo aparecerá tão grande quanto antes da próxima vez que o aplicativo gravar nele (embora com a parte principal esparso e parecendo conter bytes NUL), mas o espaço terá sido recuperado (isso não se aplica aos sistemas de arquivos HFS + no Apple OS / X que não suportam arquivos esparsos).
Para truncá-lo:
: > /path/to/the/file.log
Se já foi excluído, no Linux, você ainda pode truncá-lo fazendo:
: > "/proc/$pid/fd/$fd"
Em que $pid
é o ID do processo que tem o arquivo aberto e $fd
um descritor de arquivo no qual ele foi aberto (que você pode verificar com lsof -p "$pid"
.
Se você não conhece o pid e está procurando por arquivos excluídos, pode fazer:
lsof -nP | grep '(deleted)'
lsof -nP +L1
, como mencionado por @ user75021 é uma opção ainda melhor (mais confiável e mais portátil) (lista de arquivos com menos de um link).
Ou (no Linux):
find /proc/*/fd -ls | grep '(deleted)'
Ou para encontrar os grandes com zsh
:
ls -ld /proc/*/fd/*(-.LM+1l0)
Uma alternativa, se o aplicativo for vinculado dinamicamente, é anexar um depurador a ele e chamá-lo de close(fd)
seguido por um novo open("the-file", ....)
.