- - PR -
Runtime.exec()で起動した外部プロセスの終了
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-01-20 12:06
いつもお世話になってます。
現在、JDK1.4.2を利用して外部プロセスの構成管理Javaアプリを開発しています。 プロセスの起動・監視については、RuntimeおよびProcessクラスを利用して 実現できているのですが、終了処理に関して以下のような問題があります。 1.Windowsノートパッドなどの.exeをRuntimeで起動した場合に復帰値のProcess オブジェクトがすぐに正常終了となり、以降の監視ができない。 2.上記のようなプロセスをJavaアプリから終了させる手段が解らない。 3.終了処理ですべてのProcessをdestroyしてもメインのJavaアプリが終了しない。 (No.1で起動中のノートパッドを終了するとJavaアプリも終了する) 上記以外で一般的なJavaVMやTomcatなどのApサーバに関しては、起動・監視・終了ともに 期待通りの動作を実現できています。 問題の現象では、Exception等も発生していません。 Javaアプリでは実現が難しいのでしょうか? | ||||
|
投稿日時: 2005-01-20 12:26
Process#waitFor()を使ってみては如何でしょうか。
| ||||
|
投稿日時: 2005-01-20 12:40
Process#destroy()呼び出しで相手が確実に死ぬかどうかは、対象プロセスの
実装依存(確かSIGTERMを投げるだけ、という記述をどこかのスレッドで見たよ うな覚えが…Windowsだと何をしているのでしょうか?)だと思いますので、 Processオブジェクトを使用した不特定のプロセスに対する監視は無理かと思 いますよ。 | ||||
|
投稿日時: 2005-01-20 13:18
早速のお返事ありがとうございます。 SIGTERMについて認識はしていたのですが、意味がわかっていませんでした。 SolarisなどのUnix環境では、実現可能だということでしょうか? また、Windows環境ではProcessオブジェクト以外のAPIを利用しても実現は難しいと言うことでしょうか? 最終的には外部のシェルプログラムを起動するといったような方法をとるしかないのでしょうか? |
1