Java プログラムからプロセスを開始しています。私はそれを保持し、プログラムの後の時点で、いくつかのシグナルを送信して (UNIX シグナルの場合とは異なり、別のメカニズム)、それ自体をクリーンアップしてシャットダウンするように指示します。これは、このプロセスを終了する適切な方法です。後で再起動してプロセスを保持し、任意の回数再び停止する可能性があります。
プログラムが存在する場合は、プロセスに終了するように通知し、存在することを確認したいと思います。それ以外の場合、Java はプロセスを非同期で開始するため、プログラムが終了した後も Java は存続し、実行を続けます。
Process変数を含むオブジェクトのデストラクタでやろうと思ったのですが、Javaにはデストラクタがないようです。JNI を介して割り当てられたメモリを解放するための finalize() メソッドがありますが、これはそのような場合ではなく、どうやら finalize() が呼び出されることを保証できないようです: オブジェクトがガベージ コレクションされたときにのみ呼び出され、プログラムは、ガベージ コレクションを呼び出さずに終了まで実行される可能性があります。この場合、すべてが一度に解放され、ガベージ コレクションも finalize() も発生しません。
プログラムが終了したときに、このクリーンアップ コードが最初に呼び出されるようにする最善の方法は何ですか?
Java 1.6 で Runtime.addShutdownHook() メソッドが導入されたようですが、現在 Java 1.5 で立ち往生しています。