Android: El proceso secundario (logcat) continúa ejecutándose después de que el proceso padre (aplicación) falleció

Nuestra aplicación de Android genera un proceso de shell logcat y luego lee su resultado para su procesamiento. Sin embargo, cuando la aplicación se detiene (por ejemplo, cuando se reinicia después de la recompilación durante el desarrollo), el proceso logcat se mantendrá en ejecución. He aquí un ejemplo de este comportamiento:

processes = new ArrayList<Process>(); try { processes.add(Runtime.getRuntime().exec("logcat -v time")); processes.add(Runtime.getRuntime().exec("logcat -v time")); processes.add(Runtime.getRuntime().exec("logcat -v time")); processes.add(Runtime.getRuntime().exec("logcat -v time")); } catch (IOException e) { // oh no! } Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { for (Process p : processes) { p.destroy(); } }; }); 

Agregue esto al método onCreate () de una aplicación de prueba, inícielo y, a continuación, detenga la ejecución mediante el administrador de configuraciones. Los procesos secundarios seguirán funcionando, ahora con un padre-id de 1.

En Cómo matar el proceso logcat iniciado por la aplicación de Android? Se sugirió utilizar ProcessBuilder, pero eso no era una solución y el proceso seguirá funcionando, también.

En el proceso Stop child cuando el proceso padre se detiene , se sugirió usar un gancho de cierre – que no funciona como se demostró anteriormente.

¡Gracias!

One Solution collect form web for “Android: El proceso secundario (logcat) continúa ejecutándose después de que el proceso padre (aplicación) falleció”

Lo que usted podría hacer es spwaning otra escritura de que el único propósito es mirar su programa de Java. Siempre que muera, matar a todos sus hijos también.

Un ejemplo frágil:

 int pid = android.os.Process.myPid(); String script = "while [ -d /proc/" + pid + " ];do sleep 1;done; killall logcat"; Process p = Runtime.getRuntime().exec("/system/bin/sh", "-c", script); 

Esto supone que su proceso no se ejecuta como root, matando así sus propios procesos logcat. En su función de apagado, primero debe matar a los otros procesos ( logcat ) y luego ejecutar p.destroy(); Para detener este script asesino.

El script anterior se puede mejorar eliminando el uso de killall . En su lugar, obtenga los ID de proceso de sus procesos de logcat mediante Reflection ( esta respuesta señala a http://www.golesny.de/p/code/javagetpid ) y logcat para kill .

  • Cómo matar a mi propia actividad - la manera dura
  • Cada actividad en Android es un proceso o una aplicación es un proceso
  • Obtener (real) proceso de primer plano mediante activityManager.getRunningAppProcesses ()
  • El nombre de aplicación de PackageManager siempre es nulo
  • ¿Cómo matar un proceso?
  • La vinculación al servicio que ya fue iniciada por BroadcastReceiver crea una nueva instancia de servicio
  • Activación del flash de la cámara durante la grabación de vídeo
  • Android: mantener vivo un servicio de fondo (prevenir la muerte del proceso)
  • ¿Cómo puedo abrir un Fragmento de Android en un nuevo proceso?
  • Android proceso asesino
  • Obtener el PID de un proceso para matarlo, sin saber su nombre completo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.