2017-01-28 5 views
1

を読む前に終了するプロセスのサブプロセスを待ち:私のプログラムでJavaの次のように私が作成したプロセスを持っているプロセスの入力ストリーム

Process p = Runtime.getRuntime().exec(new String[]{"su"}); 

は、私は一度だけこのプロセスを作成します。私はAndroid用のルートファイルエクスプローラアプリケーションを開発しています。このプロセスが作成されるたびに、Androidデバイスはroot権限を与えるようにユーザーに求めます。これは非常に遅い操作であり、これはファイルブラウザであるため、頻繁にroot権限が必要です。だから、私は(STDINがこのOutputStreamのある)一度このプロセスを作成し、次のようにそのOutputStreamにコマンドを書くことにしました:

stdin.writeBytes(command + "\n"); 

私はコマンドの出力を読むことができる前に、私は私のプログラムを必要としますwriteBytesのコマンドが終了するまで待ちます。私はp.waitFor()を試しましたが、これによりプログラムがハングします。ここで

は私がのInputStreamからバイトを読み込む方法です:入力データが利用可能になるまで、それはそれはの終わりに達していると考えているためread(buffer)方法ブロックがすると、それはこの場合にはブロックしないこと

int read; 
String out = ""; 
stdout = p.getInputStream(); 
byte[] buffer = new byte[262144]; 

while (true) { 
    read = stdout.read(buffer); 
    out += new String(buffer, 0, read); 
    if (read < BUFF_LEN) { 
     //we have read everything 
     break; 
    } 
} 

注意InputStream

私はこの投稿に自分のコードの関連部分だけを入れようとしましたが、これが含まれているクラスのソースコード全体を見たい場合は、http://pastebin.com/t6JdWmQrを参照してください。

プロセス 'InputStreamを読み取る前に、コマンドの実行が終了したことを確認するにはどうすればよいですか?

答えて

0

は私も同様の問題が発生した、と私はここで答えを見つけました:あなたはこのシェルプロセスにおける任意の読み取りストリームを必要としない場合は、単にシェル読み出されたストリームは、シェルプロセスを完了して追加 Wait until a command in su finishes

また、XDAでも良い方法があります。 [HowTo]Execute Root Commands and read output

関連する問題