Fechando o arquivo aberto sem matar o processo

5

Eu tenho o aplicativo java (yeah java ...) em execução no CentOS 7. Depois de um tempo, há muitos arquivos "excluídos" que me incomodam.

para arquivos excluídos usados (não o problema):

lsof | grep "(deleted)"

Eu os encontrei em / proc / pid / fd / ... e minha pergunta é como posso matá-los / apagá-los sem matar o processo (o processo precisa ser executado 24 horas por dia, sete dias por semana).

Eu vi no google que eu posso usar a ferramenta gdb, mas não sei como usá-lo. Você pode por favor me ajudar (apenas para escrever o manual passo-a-passo)?

Eu adorarei ouvir algumas outras sugestões, se você tiver.

    
por igor 27.08.2015 / 15:09

1 resposta

7

use lsof -p $PID e encontre o descritor de arquivo (4a coluna)

root@blah:~# lsof -p 1737 | grep "(deleted)" apache2 1737 root 6w REG 0,25 0 207401 (deleted)/var/log/apache2/other_vhosts_access.log

A quarta coluna é 6w, significando o descritor de arquivo 6 e foi aberta para escrita (w).

Então:

gdb -p $PID p close($FD)

por exemplo:

gdb -p 1737 ..... (gdb) p close(6) $1 = 0 ... Quit anyway? (y or n) y Detaching from program: /usr/lib/apache2/mpm-prefork/apache2, process 1737

    
por 27.08.2015 / 17:20