分割されたTARファイルを作成し、ディレクトリのサイズを確認して進行状況を読み取ろうとしています。 (PVコマンドは使用できません)。Runtime.getRuntime()。execコマンドでPIPEを使用する
tarService.javaに私は、コマンドを変更しない場合は、誰かが私に理由を説明できます:他のプロセスが終了するまでとしながら、何をログMainActivityにおけるプロセス
String cmd="su -c tar -cp -C /dev . | split -b 1G -a 3 - "+ fname;
ん:
String cmd="su -c tar -cpf " + fname + " -C /dev .";
それは動作します!
どちらの場合も注意してtarファイルが作成されます。
MainActivitiy.java
public void startBackup(View v){
back= new BackgroundTask().execute();
}
private class BackgroundTask extends AsyncTask<Void, Integer, String> {
@Override
protected String doInBackground(Void... arg0) {
backup = new Intent(MainActivity.this, tarService.class);
backup.putExtra("fname", "test.tar);
status=999;
startService(backup);
while (status == 999) {
try {
Process process = Runtime.getRuntime().exec("du -sk /dev");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
Log.d(TAG,line);
}
}
}
}
}
tarService.java
protected void onHandleIntent(Intent i) {
try{
location=i.getStringExtra("location");
fname=i.getStringExtra("fname");
// THIS WORKS
String cmd="su -c tar -cpf " + fname + " -C /dev .";
Process process = Runtime.getRuntime().exec(cmd);
int code=process.waitFor();
Intent intent = new Intent("BackupProcess");
intent.putExtra("status", code);
Log.d(TAG,Integer.toString(code));
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
} catch (IOException e) {
Log.e(TAG, e.getMessage());
throw new RuntimeException(e);
}
}
は、コードエラーが発生しました
を解決し、私はdu
コマンドにファイル名を渡しました。あまりにも、しかし、s plitはファイル名が異なります。
PIPEは親コマンドの出力を入力時と同じように使用します。したがって、pipeコマンドを使用してログの詳細を同時に取得することはできません。 –
tarコマンドを実行するサービスを実行した後のmainActivityでは、パイプなしでフォルダのサイズを読み取る別のプロセスを実行しますが、他のプロセスはtarファイルを作成していますが、フォルダのサイズは表示されますが、 。私はパイプが入力として親コマンドを取得知っているが、私は別のプロセスでサイズを読み取ろうとしている、私は間違っている? –