- - PR -
別マシンのプロセスをkillする方法
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-08-06 19:52
初めて投稿します。
いつも参考にさせていただいております。 Windows2000上でJavaのアプリケーションを作っている のですが、別マシン(Linux)のプロセスをkillする方法 がわからず困っています。 java.lang.Runtime.execメソッドを使うと、 実行されたマシン上で killコマンドが実行されてしまい 期待する動作は得られませんでした。 以下にコードを一部抜粋します。 String[] cmd = {"kill", "-9", PID}; try{ process p = Runtime.getRuntime().exec(cmd); p.waitFor(); p.destroy(); } catch(Exception e) { e.printStackTrace(); } 別のマシン上でコマンドを実行する方法はないものでしょうか。 #的外れな質問でしたらスミマセン | ||||
|
投稿日時: 2003-08-07 10:17
Javaとか何とか言う前にそれができたら何ができるか(何をされてしまうか)考えてみてください。
それをわかった上で、通常そういう場合にどうするかを考えてみてください。 当たり前ですがjava.lang.Runtimeはローカルのプロセスしか扱えません。 | ||||
|
投稿日時: 2003-08-07 10:44
既にレスがついていますが、Javaだからどうとかいうことでなく、Linuxマシン上で
稼動するプロセスをリモートホストからkillする方法は標準では存在しないと 思います。 ご自分でプロセスをkillするサーバを作成してLinux上で稼動させ、それに対して リモートのJavaプログラムから接続する、という形になると思います。 しかしこれは非常に危険ですので、そもそもLinux上ののプロセスをリモートから killしなければいけないのかどうか、もう一度良く考えたほうが良いですよ。 | ||||
|
投稿日時: 2003-08-07 13:27
少し説明が足りなかったかもしれないので、補足しておきます。
悪意があって他のマシンのプロセスをkillしようと思っている わけではございません^^;(念のため) しかし、execメソッドにはセキュリティホールもあり危険である ことも投稿をした後で気づきました。 http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole02.html 別のマシンのプロセスをkillしたい理由は、以下の仕様による ものです。 DB(Oracle)の複数インスタンスのスループットをグラフでモニタ リングするアプリケーションを作成しているのですが、[ABORT] ボタンで、バックグラウンドプロセスを停止するという処理を行 なうためです。 おばけさんがおっしゃる方法、各ホストにあらかじめインスタ ンスをABORTする(=プロセスをkillする)デーモンを作成して 起動させておき、要求に応じてそのデーモンがプロセスをkill することは考えておりました。 他にもっと簡単な方法があるのではないか、と思ったのですが やはりないようですね。。 ご助言、ありがとうございました。 | ||||
|
投稿日時: 2003-08-07 14:20
あるはずでしょう。。。。(爆笑 SSHとかリモートシェルとか、RPCとか。 #Javaの体系から外れますが。 それをJavaから呼び込む方法を考えれば済む筈。 しかも、見ただけで新人レベルでも可能な複数の方法が 浮かぶんですが... 周りのシニアクラスのエンジニアにご相談を奨めます。 さもないと、組織として"恥じ"でしょう!? | ||||
|
投稿日時: 2003-08-08 11:24
http://javatelnet.org/
にあるパッケージを使用することで解決しましたので 以下に報告しておきます。 テスト用コードを載せておきますので見ていただければ わかると思いますが、非常に簡単に実現できました。
[ メッセージ編集済み 編集者: kon 編集日時 2003-08-21 13:24 ] | ||||
|
投稿日時: 2003-08-08 15:06
telnetのパターンを利用したんですね。 ピュアなJavaの流儀からは、やや逸脱ですが良かったですね。 #頑張ってください。 | ||||
1
