2

アプリケーションが実行されているかどうかを確認したいJavaアプリケーションがあります。実行されていない場合は、開始したいと思います。実行中の場合は、強制終了してから再起動します。

誰かがこれを行う方法を教えてもらえますか? ProcessBuilder を使用すると、プログラムを簡単に開始/停止できます。しかし、すでに実行されているプロセスを検出できません。

ご協力いただきありがとうございます!ジョン

4

4 に答える 4

1

アプリケーションの協力がなければ (理想的には、ネットワーク ポートでリッスンする必要があります)、それは不可能な場合があり (Java アプリにはアプリを強制終了する権限がない可能性があります)、OS 固有のコードが必要になります。Linux では、psandkillコマンドを使用します。

于 2009-06-18T15:54:51.257 に答える
0

他のアプリケーション (監視しているプロセス) はあなたの責任下にありますか? もしそうなら、私が数年前にいくつかの高可用性システムで使用した方法を使用できます: その他のアプリケーションへの接続を開き、それを「ping」します。他のアプリケーションが指定されたタイムアウト内に応答しない場合、それはダウンしているか「ハング」しており、これは悪いことです (プロセス監視では検出できないものです。接続を開くには、ソケットを使用するか、より洗練された方法で行うことができます)。プロトコル (SOAP?). 別の方法として、アプリケーションに "I'm alive" メッセージを頻繁に送信させることもできます. しばらく受信していない場合は、アプリケーションを再起動する必要があります. 実際に "kill" するには他のプロセスでは、exec() メソッドから取得した Process インスタンスを保持し、必要に応じてそれを destroy() することができます。

于 2009-06-18T16:56:28.347 に答える
0

ばかげているように聞こえるかもしれませんが、アプリケーションの起動時に既知の名前のファイルを作成できます。何も含む必要はありません。アプリケーションが実行されているかどうかを確認するには、そのファイルが存在するかどうかを確認します。

于 2009-06-18T15:51:23.703 に答える
0

返信ありがとうございます。それが私が恐れていたものでした。起動したいものをアプリケーションに追加しないようにしています。基本的に、アプリケーションのコレクションにリモート コントロール Web インターフェイスを追加しようとしています。

私が書いている Web サーバー アプリケーションは、基本的に、目標を達成するために互いに通信する 3 つのアプリを開始/停止します。Web サーバーがそれらを開始および停止する場合、すべて問題ありません。しかし、何らかの理由で起動しようとしたときに既に実行されている場合、悪いことが起こります。

これは、Visual Studio (C++/C#/etc) で処理できることがわかっているものです。ただし、このプロジェクトは、プラットフォームの独立性要件により、Java で作成する必要があります。

助けてくれてありがとう!

于 2009-06-18T17:09:18.737 に答える