バッチ ファイル (ループする) から起動して、System.exit(1) を使用できますか?
その場合は、バッチ ファイルでエラー レベルをテストし、1 の場合はループ バックしてプログラムを再起動しますが、0 の場合はバッチ ファイルを終了します。
編集:外部から「リセット」をトリガーしますか(unixから?)
もしそうなら、私の提案は次のようになります。
- -restart というコマンドライン オプションを作成します。
- コマンド ラインなしで実行する場合は、事前に設定された高いポート (32123?) でソケットを開き、アプリの起動の一部として接続をリッスンします。
- キー文字列が渡された接続を取得したら、System.exit(1); を実行します。
- -restart で実行すると、通常の起動の代わりにそのポートに接続し、正しいキー文字列を送信して終了します。
- 再起動ルーチンが接続できない場合は、デーモンが実行されていないことを示すエラー メッセージを出力してください。
メッセージを既存のプロセスに送信する方法は他にもありますが、おそらくソケットを使用するのが最も簡単です。数行のコードしかありません。もう 1 つは、ある絶対的な場所にファイルが存在するかどうかをポーリングすることです。また、PID を見つけて強制終了することもあります。
プラットフォームに依存しないという追加の利点としてのソケット。