私はJava(そうJava ...)アプリケーションをCentOS 7で実行しています。しばらくすると、「削除された」ファイルがたくさんあり、気になります。
使用された削除済みファイル(問題ではない):
lsof | grep "(deleted)"
私はそれらを/ proc/pid/fd/...で見つけました、そして私の質問は、プロセスを殺すことなくそれらを殺す/削除する方法です(プロセスは24/7を実行する必要があります)。
Googleでgdbツールを使用できることを確認しましたが、使用方法がわかりません。私を助けてくれますか(ステップバイステップのマニュアルを書くだけです)?
あれば、他の提案もお待ちしています。
_lsof -p $PID
_を使用してファイル記述子を検索します(4番目の列)
root@blah:~# lsof -p 1737 | grep "(deleted)" Apache2 1737 root 6w REG 0,25 0 207401 (deleted)/var/log/Apache2/other_vhosts_access.log
4番目の列は6wで、ファイル記述子6を意味し、書き込み用に開かれました(w)。
次に:
gdb -p $PID p close($FD)
例えば:
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
次のコマンドを使用して、削除されたファイルのファイル記述子を検索し、後でそれらを切り捨てることができます
find/proc/-mindepth 3 -maxdepth 3\-regex '/ proc/[1-9] [0-9] / fd/[1-9] [0-9]' -type l -lname '*(削除済み)'\-printf '%p\n%l\n' 2>/dev/null