Maxim Shoustin Maxim Shoustin - 5 months ago 65
Android Question

How to kill logcat process initiated by Android application?

I have Android application that on Service start implement followed code:

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


As you see I start logcat process to listen on logs.
Unfortunately, the stop service doesn't stop logcat and after several launches i get:

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


... list of logcat processes. How can I kill them?

Any ideas

acj acj
Answer

Since you have a handle on the Process instance, you should be able to use process.destroy() when you stop your service. The Logcat processes are running independently of your app, so they will continue running after your app's Service stops running unless you terminate them.

If you just want to clean up the processes on your device while testing the app, you can run adb shell to get a shell prompt on the device, and then use kill <PID> to terminate a process.

EDIT:

The Process documentation also specifies that you should use ProcessBuilder to set up and run the process:

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