- - PR -
Runtimeクラスでの連結コマンドの実行について(Linux)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-03-29 14:35
RuntimeクラスからLinuxのコマンドを実行しようとしています。
単一のコマンド、例えば「ls -l」や「ps -ef」などは問題無く実行できるのですが、 これらをパイプ「"|"」で連結させた場合、例えば「ps -ef | grep java」のような コマンドが実行できません。 そもそもRuntimeクラスからはパイプを使って連結されたコマンドは実行できないのでしょうか? ご教授いただける方がいらっしゃいましたら、よろしくお願いします。 ちなみに以下のコーディングで確認しています。 -------- Process process = Runtime.getRuntime().exec("ps -ef | grep java"); // 外部コマンドの標準出力を取得するための入力ストリームを取得 InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); // 標準出力を1行づつ取り出し String line; while ((line = br.readLine()) != null) { System.out.println(line); } | ||||
|
投稿日時: 2006-03-29 14:48
パイプやリダイレクションなどのシェルが解釈しているものは、
そのままではRuntime#execで使用できません。 シェルを介して実行する必要があるようです。
上記はlsコマンドのものですが、改変すればpsコマンドも実行 できるのではないでしょうか。 (JavaFAQ:http://javafaq.jp/S103.htmlより) | ||||
|
投稿日時: 2006-03-29 15:00
回答ではありませんが、java.lang.Runtime#execを実行したらProcess#waitForを使って処理が終わるまで待つようにした方がいいですよ。
| ||||
|
投稿日時: 2006-03-29 16:37
返信いただきありがとうございます。 >>悠さん psでも同様に実行できました。 大変参考になりました。ありがとうございました。 >>想馬さん ご指摘ありがとうございます。 どこかでは呼ばないととは思っていたのですが、抜けたままでした。 exec()の後に追記するようにします。 |
1