내 Android 애플리케이션에서 ping 명령을 실행하려고 시도 중이며이를 취소/중단 신호를 보낼 수 있습니다. 기본적으로 나는 ping 통계를 얻고 싶다. 보통 리눅스에서 ping을 할 때 ctrl + c를 보내면된다. 나는 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");
}
}
});
지금까지 난 그냥 프로세스를 죽이는 시도하지만 즉시 모든 출력을 정지합니다. 그리고 어떻게 안드로이드에서 자바가 시작한 ping 명령을 "우아하게"멈출 수 있습니까?
편집 그래서 내가 내 핑 프로세스의 PID를 얻을 관리, ADB 콘솔을 통해 올바른을 확인했습니다. 나는 그것을 사용하여 죽이려고했다 : Runtime.getRuntime(). exec ("kill -INT"+ getPid (process)); ErrorStream 출력은 없지만 아무 일도 일어나지 않는다. Process.sendSignal (getPid (process), Process.SIGNAL_QUIT);와 동일합니다. 누군가?