- PR -

Runtime.exec()で起動した外部プロセスの終了

1
投稿者投稿内容
hiro
常連さん
会議室デビュー日: 2004/09/02
投稿数: 21
投稿日時: 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アプリでは実現が難しいのでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-01-20 12:26
Process#waitFor()を使ってみては如何でしょうか。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-01-20 12:40
Process#destroy()呼び出しで相手が確実に死ぬかどうかは、対象プロセスの
実装依存(確かSIGTERMを投げるだけ、という記述をどこかのスレッドで見たよ
うな覚えが…Windowsだと何をしているのでしょうか?)だと思いますので、
Processオブジェクトを使用した不特定のプロセスに対する監視は無理かと思
いますよ。
hiro
常連さん
会議室デビュー日: 2004/09/02
投稿数: 21
投稿日時: 2005-01-20 13:18
引用:

シュンさんの書き込み (2005-01-20 12:40) より:
Process#destroy()呼び出しで相手が確実に死ぬかどうかは、対象プロセスの
実装依存(確かSIGTERMを投げるだけ、という記述をどこかのスレッドで見たよ
うな覚えが…Windowsだと何をしているのでしょうか?)だと思いますので、
Processオブジェクトを使用した不特定のプロセスに対する監視は無理かと思
いますよ。




早速のお返事ありがとうございます。
SIGTERMについて認識はしていたのですが、意味がわかっていませんでした。
SolarisなどのUnix環境では、実現可能だということでしょうか?
また、Windows環境ではProcessオブジェクト以外のAPIを利用しても実現は難しいと言うことでしょうか?
最終的には外部のシェルプログラムを起動するといったような方法をとるしかないのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)