アプリ版:「スタンプのみでお礼する」機能のリリースについて

String com = "ls -l";
Process pro = Runtime.getRuntime().exec(com);

上記のようにして、外部コマンドを実行しています。
この方法を使用すると投げたコマンドが終了してしまうまで、後の処理が行われません。

バックグラウンド処理を行いたかったので、

String com = "ls -l &";
Process pro = Runtime.getRuntime().exec(com);

としてみましたが、結果は変わりませんでした。
何か別の指定方法が存在するのでしょうか。

ご存知の方、ぜひ教えてください。

A 回答 (1件)

Runtime#execによるコマンドの実行は、そもそも非同期に行われます。

(同期するためにProcess#waitForというメソッドがあります)
おそらく、Process#getInputStreamで得たInputStreamからすべて読み込もうとしているのではないでしょうか。だとすると、その時点で同期処理になってしまいます。

目的によるとは思いますが、別スレッドにして走らせてみてはどうでしょう。

new Thread() {
public void run() {
String com = "ls -l";
Process pro = Runtime.getRuntime().exec(com);
// ...
}
}.start();

(例外処理省略)
    • good
    • 0
この回答へのお礼

>Runtime#execによるコマンドの実行は、そもそも非同期に行われます。
>おそらく、Process#getInputStreamで得たInputStreamからすべて読み込もうとしているのではないでしょうか。
>だとすると、その時点で同期処理になってしまいます。
質問を投げた後、プログラムの出力結果を受け取っていることに問題があるのでは???と思ったのですが、
確証もなかったので質問を取り消せなかったのです・・・。
確かにそのとおりで、その後出力結果を受け取らないように等、いろいろな事を行ってみた結果、うまく動作していました。

ご指摘、ありがとうございました。

お礼日時:2002/09/11 10:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!