我试图在我的Android应用程序中执行ping命令,并能够取消它/发送中断信号。基本上,我希望在任何普通的linux中,当你发送ctrl c到ping时,都能得到ping统计数据。我读过Send Ctrl-C to process open by Java,但它针对的是Windows平台,而tbh似乎有点过头了。我执行命令的代码(我使用的是rxjava):
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命令呢?
编辑
所以我设法得到了pinghtml" target="_blank">过程的PID,通过adb控制台验证了它的正确性。我试图用:Runtime杀死它。getRuntime()。exec(“kill-INT”getPid(process));,没有ErrorStream输出,但什么也没有发生。过程也是如此。sendSignal(getPid(进程),进程。发出退出的信号;。任何人
问题解决了,结果它对信号没有反应,因为我在不同的线程上运行了ping。
问题内容: 我正在使用popen()打开一个长期运行的过程。对于调试,我想在完成之前终止该过程。调用pclose()只会阻塞直到子项完成。 我如何杀死这个过程?我没有找到任何简单的方法来从popen()返回的资源中获取pid,以便可以向其发送信号。 我想我可以做些杂乱的事情,并尝试使用某种命令行黑客将pid混入输出中… 问题答案: 好了,找到了一个解决方案:我改回而不是。然后就这么简单:
问题内容: 我创建了一个.NET Core控制台应用程序,该应用程序在Ubuntu 14.04计算机上作为守护程序运行。 我想停止服务而不强制它,因为它能够处理kill事件。 我该如何实现? 问题答案: 您希望能够将 SIGTERM 发送到正在运行的进程: 并且该进程应处理它以正确关闭。 不幸的是, .NET Core的 文档不完善,但是它能够处理Unix信号(与 Mono的 方式不同)。GitH
问题内容: 我想知道如何“杀死”已启动的过程。我知道Process API,但是不确定,是否可以使用它来杀死已经运行的进程,例如firefox.exe等。如果可以使用Process API,可以请您指向正确的方向?如果没有,还有哪些其他可用选项?谢谢。 问题答案: 如果你从Java应用程序中以从头开始处理(例如,通过调用或),那么你将对其具有有效的引用,并且可以在Process类中调用该方法以终止
问题内容: 如何在Linux和Windows中正常停止Java进程? 什么时候被调用,什么时候不被调用? 终结器又如何呢? 我可以从外壳向Java进程发送某种信号吗? 我正在寻找最好的便携式解决方案。 问题答案: 在所有未强制终止VM的情况下,都会执行关机挂钩。因此,如果要发出“标准” kill(通过kill命令),则它们将执行。同样,它们将在调用后执行。 但是强行杀死(或),然后它们将不会执行。
问题内容: 我从python脚本生成了5个不同的进程,如下所示: 我的问题是,当父进程(主脚本)以某种方式被杀死时,子进程继续运行。 当父进程被杀死时,有没有办法杀死这样生成的子进程? 编辑:我正在尝试: 但这似乎不起作用 问题答案: 我自己也遇到了同样的问题,我有以下解决方案: 打电话之前,您可以设置。然后如此处所述python.org multiprocessing 进程退出时,它将尝试终止其
问题内容: 考虑这一行: 显然,这行是潜在的错误,属性可能是,我们将获得。因此,我们需要将其重构为以下两种选择之一: 第一种选择: 第二种选择: 第一种选择阅读时比较笨拙,但更为简洁;第二种选择的意图很明确,但很冗长。 就可读性而言,您更喜欢哪个选项? 问题答案: 我一直都在用 因为尽管阅读起来有点困难,但是它的冗长程度要小得多,而且我认为它足够易读,因此您可以很容易地习惯它