私のAndroidアプリケーションでpingコマンドを実行しようとしていますが、キャンセル/中断信号を送ることができます。基本的には、通常のLinuxでpingにCtrl + Cを送るときのように、pingの統計を取得したいのです。 私はSend Ctrl-C to process open by Javaを読みましたが、それはWindowsプラットフォームを目指しており、tbhは少し残酷に思えます。私の(私はrxjavaを使用しています)コマンドを実行するためのコード:AndroidでJavaでプロセスを正常に終了させる
public rx.Observable<String> getPingOutput(String address)
{
return rx.Observable.create(new rx.Observable.OnSubscribe<String>()
{
@Override
public void call(Subscriber<? super String> subscriber)
{
try
{
process = Runtime.getRuntime().exec("ping -c 4 " + address);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
String s;
while ((s = stdInput.readLine()) != null)
{
subscriber.onNext(s);
}
subscriber.onCompleted();
process.destroy();
stdInput.close();
}
catch (IOException e)
{
subscriber.onError(e);
if(process != null)
{
process.destroy();
}
}
}
});
}
そしてキャンセル/開始:
RxView.clicks(pingButton)
.subscribe(new Action1<Void>()
{
@Override
public void call(Void aVoid)
{
if (isPingInProgress())
{
process.destroy();
subscription.unsubscribe();
isPing = false;
pingButton.setText("Ping");
}
else
{
if(adapter!= null)
{
adapter.clear();
adapter.notifyDataSetChanged();
}
String address = addressInput.getText().toString();
subscription = getPingOutput(address)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(myObserver);
isPing = true;
pingButton.setText("Stop");
}
}
});
をこれまでのところ、私はちょうどプロセスを殺すが、それはすぐにすべての出力を停止してみました。そして、アイデアはどうやってAndroid上でJavaによって開始されるpingコマンドを「優雅に」止めることができますか?
EDIT
は、だから私は、私のpingプロセスのPIDを取得するために管理し、ADBコンソール経由でその正しいことを確認しました。私はそれを使用してそれを殺そうとしました: Runtime.getRuntime()。exec( "kill -INT" + getPid(process)); ErrorStream出力はありませんが、何も起こりません。 Process.sendSignal(getPid(process)、Process.SIGNAL_QUIT);と同じです。誰でも?