実行中に java.io.tempdir にいくつかの一時ファイルを作成するライブラリがあります。最初の質問は、linux/centos が開いている間に /tmp の一時ファイルを自動削除するかどうかです。願っていません!
2 番目の質問です。JVM が終了または中止されたときに一時ファイルが自動的にクリーンアップされるようにしたいと考えています。File.deleteOnExit はオプションではありません。一般に、ライブラリのクライアントが「ストリーム」を閉じると一時ファイルが削除されるためです。これらは非常に一時的なファイルであり、適切に使用すれば混乱することはありませんが、一時ファイルが削除されないためにクラッシュやその他の原因が発生する可能性があります.
最初のアイデアは、これを行う最善の方法は、File.createTempFile を使用するのではなく、/tmp 内に独自の一意の名前のフォルダー (名前のランダムな部分を持つ) を作成し、このフォルダー内にすべての一時ファイルを作成することです。次に、シャットダウン フックを登録し、VM インスタンスで使用されるフォルダーのパスを把握して、シャットダウン時にこのフォルダーを反復処理し、フォルダー内のすべてのファイルを削除してから、フォルダーを削除します。
開いているファイルを削除できるという事実に基づいて、これはLinuxで機能するように見えますが、シャットダウンフックが呼び出される前に一時ファイルストリームのクライアントがすべてのストリームを閉じているという私のライブラリの保証はありません。ファイルは削除されません。それは問題だ。
また、一部のコンテナではシャットダウン フックが許可されていない場合があり、許可されている場合でも、シャットダウン フックが呼び出されるという絶対的な保証はありません。
私が望むのは、起動時にライブラリが作成したガベージをクリーンアップする信頼できる方法で、このアプローチが同じマシンで実行されている複数の JVM で機能するようにすることです。