Obtener el PID de un proceso para matarlo, sin saber su nombre completo

Estoy codificando una aplicación de Android. Ahora voy a una parte donde la aplicación debe matar a un proceso. Pero no sé su nombre completo o su PID. Conozco los comandos:

android.os.Process.killProcess(Pid) 

y

 android.os.Process.getUidForName("com.android.email") 

Pero mi problema es que no sé el nombre completo del proceso.

Es un proceso de código nativo, por lo que no es algo como com.something.algo

El proceso es /data/data/com.something.something/mybinary

Pero se está ejecutando con comandos como

 /data/data/com.something.something/mybinary -a 123 -b 456 

Por eso no puedo usar

 android.os.Process.getUidForName("/data/data/com.something.something/mybinary") 

Puedes usar:

 ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProcessInfo> services = manager.getRunningAppProcesses(); String service1name = services[1].processName; 

Puede obtener todos los nombres de paquetes del proceso en ejecución, compruebe el que desea matar, elija ese proceso para obtener la identificación del proceso por service.pid.

Y llama:

 android.os.Process.killProcess(service.pid); 

Su nombre de proceso es '/data/data/com.something.something/mybinary' primero obtenga el id del proceso nativo ejecutándose analizando la salida de la parte superior y luego use android.os.Process.killProcess (Pid)

  import org.apache.commons.exec.*; import java.io.IOException; public class NativeKillerRunnable implements Runnable { private static final Logger logger = LoggerFactory.getLogger(NativeKillerRunnable.class); @Override public void run() { String commandtoexec = "top -n 1 -m 100"; CommandLine cmdLine = CommandLine.parse(commandtoexec); DefaultExecutor executor = new DefaultExecutor(); try { PumpStreamHandler psh = new PumpStreamHandler(new LogOutputStream() { @Override protected void processLine(String s, int i) { s = s.trim(); //check for name of your binary process if(s.contains("mybinary")) { String[] strings = s.split(" "); android.os.Process.killProcess(Integer.parseInt(strings[0])); logger.info("killed mybinary process with pid = "+strings[0]); } } }); executor.setStreamHandler(psh); executor.execute(cmdLine); } catch (ExecuteException executeException) { logger.error("caught exception while killing mybinary process "+executeException.getMessage()); } } 

}

Usted puede hacer smth como esto:

 Process p = Runtime.getRuntime().exec("ps"); p.waitFor(); StringBuffer sb = new StringBuffer(); InputStreamReader isr = new InputStreamReader(p.getInputStream()); int ch; char [] buf = new char[1024]; while((ch = isr.read(buf)) != -1) { sb.append(buf, 0, ch); } HashMap pMap = new HashMap<String, Integer>(); String [] processLinesAr = sb.toString().split("\n"); for(String line : processLinesAr) { String [] comps = line.split("[\\s]+"); if(comps.length != 9) return; pid = Integer.parseInt(comps[1]); packageName = comps[8]; pMap.put(packageName, pid); //... } 

A continuación, puede analizar sb y obtener pid de su proceso.

  • Cómo leer la salida del comando de proceso android
  • Android: mantener vivo un servicio de fondo (prevenir la muerte del proceso)
  • ¿Cómo puede una aplicación de Android tener más de un proceso?
  • ¿Es posible iniciar una Actividad como un nuevo proceso
  • Exploración de subred de Android
  • ¿Cuáles son los pros y los contras de usar múltiples procesos dentro de la aplicación Android
  • ¿Por qué debo comenzar el servicio de urbanairship como un proceso separado?
  • ¿Cómo matar un proceso?
  • Lista de todos los procesos en ejecución en Android
  • Android obtener el nombre del proceso dentro de BroadcastReceiver
  • Obtener (real) proceso de primer plano mediante activityManager.getRunningAppProcesses ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.