を読む前に終了するプロセスのサブプロセスを待ち:私のプログラムで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を読み取る前に、コマンドの実行が終了したことを確認するにはどうすればよいですか?