如何杀死Android应用程序启动的logcat进程?

时间:2012-10-17 18:24:07

标签: android process

我有Android应用程序,在服务启动工具上跟着代码:

...
Process process = Runtime.getRuntime().exec("logcat -v time -s " + arg);
BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
...

如您所见,我启动logcat进程来监听日志。 不幸的是,停止服务不会停止logcat,并且在几次启动后我得到:

app_125   4782  144   137124 30584 ffffffff 00000000 S com.wefi.agnt.ui
app_125   4796  4782  1028   592   ffffffff 00000000 S logcat
app_125   4839  4782  1076   640   ffffffff 00000000 S logcat
app_125   4842  4782  952    516   ffffffff 00000000 S logcat
app_125   4845  4782  896    460   ffffffff 00000000 S logcat
app_125   4848  4782  900    464   ffffffff 00000000 S logcat
app_125   4851  4782  876    440   ffffffff 00000000 S logcat
shell     4852  171   788    336   c00cc7e4 afd0c78c S /system/bin/sh
shell     4853  4852  944    332   00000000 afd0b83c R ps
app_123   11189 144   114484 18908 ffffffff 00000000 S com.mspot.android.moviesClub.att  

... logcat进程列表。我怎么能杀了他们?

任何想法

2 个答案:

答案 0 :(得分:2)

由于您拥有Process实例的句柄,因此您可以在停止服务时使用process.destroy()。 Logcat进程独立于您的应用程序运行,因此它们将在您的应用程序Service停止运行后继续运行,除非您终止它们。

如果您只是想在测试应用时清理设备上的进程,可以运行adb shell在设备上获取shell提示符,然后使用kill <PID>终止进程。

修改

Process文档还指定您应使用ProcessBuilder来设置和运行该过程:

ProcessBuilder pb = new ProcessBuilder("logcat", "-v", "time", "-s", arg);
pb.redirectErrorStream(true);
Process process = pb.start();
...

答案 1 :(得分:2)

首先启动adb日志记录,创建一个进程:

 String cmd1 = "logcat -v time -f" + filename.getAbsolutePath();
 Process logcat = Runtime.getRuntime().exec(cmd1);

在此之后,无论何时想要停止adb更新以写入文件,都可以简单地调用:

 String cmd = "logcat -c";
    try {
        logcat.destroy();
        logcat = Runtime.getRuntime().exec(cmd);
    } catch (IOException e) {
        e.printStackTrace();
    }

这将破坏先前的构建过程并清除所有先前记录的adb日志。因此,再次开始adb日志记录的时间,它将从同一时间开始,而不添加先前日志中的重复值。