3 votos

¿Cómo puedo forzar la detención de todas las aplicaciones de usuario que se están ejecutando?

He descubierto que, en primer lugar, Sistema>Aplicaciones>Ejecución no siempre es útil y, en segundo lugar, si detenemos los servicios, es posible que se inicie de nuevo si la aplicación correspondiente se está ejecutando. La forma correcta de detener la aplicación es forzar la parada . (por eso el ram booster puede no ser suficientemente útil).

He hecho un simple script que obtiene la lista de todas las aplicaciones del usuario y luego fuerza la detención de todas una por una:

pm list packages -3 -f | sed /jackpal.androidterm/d > /sdcard/tbs/app2fs

while read -r line; do APK=$(echo $line | cut -d ':' -f2 | cut -d '=' -f1); PKG=$(echo $line | cut -d '=' -f2); echo "Forcing to Stop: $(aapt d badging $APK | grep "application: label" | cut -d "'" -f2)"; am force-stop $PKG; done < /sdcard/tbs/app2fs

El inconveniente de este comando es que intenta forzar la detención de todas las aplicaciones de terceros (independientemente de que se estén ejecutando o no). Pero quiero hacer am force-stop sólo para las aplicaciones de usuario en ejecución.

Así que, ¿Cómo puedo obtener la lista de todas las aplicaciones de usuario que se están ejecutando (no los servicios)?

Puede que tengas mejor forma de hacerlo que mi script/comando, por eso ampliamente: ¿Cómo puedo forzar la detención de todas las aplicaciones de usuario que se están ejecutando?

Nota: Recomiendo la solución de línea de comandos. Porque este tipo de aplicación (que puede forzar la detención de todas las aplicaciones de usuario en ejecución) en su mayoría se ejecuta constantemente para el monitoreo que no me gusta. Si usted tiene una sugerencia para una aplicación que puede hacer ese trabajo y también favorable (no debe ejecutar constantemente para el monitoreo), entonces usted puede sugerirlo.

2voto

Firelord Puntos 161

Nota : Esta solución:


Si una aplicación se está ejecutando (ya sea en segundo plano o en primer plano) entonces debe tener un proceso asignado. En ese caso, debería aparecer bajo el radar de ps de mando. Podemos separar los procesos de las aplicaciones de ps y compararlos con la lista almacenada desde pm comando. Lo que salga como común se puede matar con seguridad.

Aquí hay un script para hacerlo:

#!/system/bin/sh

HOME="/data/media/0";
mkfifo "$HOME"/ps "$HOME"/packages;
/system/bin/ps | grep 'u0\_' | awk '{print$9}' | sort -o "$HOME"/ps &
pm list packages -3 | sed 's/package://g' | sort -o "$HOME/"packages &
comm -12 "$HOME"/ps "$HOME"/packages | while read package; do am force-stop "$package"; printf "Force-stopped: $package\\n"; done
rm "$HOME"/ps "$HOME"/packages;

Este script debe ser ejecutado con privilegio Root.

En ese script:

  • Estoy creando dos tubos con nombre , a saber ps y paquetes en /data/media/0 . (Es opcional hacerlo. Puede eliminar con seguridad las líneas que empiezan por mkfifo y rm ). Me baso en la salida proporcionada por los nativos ps herramienta. Si una aplicación tiene un proceso, su nombre de paquete se mostrará bajo la columna NOMBRE . Estoy usando grep para filtrar los procesos que se ejecutan bajo el usuario 0 (su cuenta de usuario tiene ID de usuario 0) y luego usando awk para imprimir el noveno campo. Ese campo en cada línea mostraría un nombre de paquete.

    Nota que puede utilizar el sistema Busybox ps herramienta. Tiene una función para mostrar sólo una columna en particular. Usted tendrá que ajustar el script un poco, pero se puede prescindir de la dependencia de código duro (un campo particular en una línea).

  • Estoy almacenando una lista de paquetes instalados por el usuario (de terceros) utilizando pm herramienta.

  • Ahora estoy comparando el contenido de ps y paquetes y enumerar sólo las líneas comunes. Nota que utilicé ordenar en comandos anteriores porque com requiere un archivo ordenado.

    Cada línea común pasa entonces por un bucle en el que la línea (un nombre de paquete) se utiliza para forzar la parada del paquete correspondiente.

Nota : am force-stop es inútil contra una aplicación administradora de dispositivos.

0 votos

¿Cómo me he perdido ps ¡!

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X