|
||
|
#41
|
||||
|
||||
|
cat /proc/%pid/oom_adj me sale 9
cat /proc/(%pid)/oom_adj me sale 11 Sí, me he llevado una sorpresa Pero sin embargo, ejecuto cat /proc/$(%pid$)/oom_adj me da error ![]() A investigar...
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
|
|
#42
|
||||
|
||||
|
Guía del principiante a Tasker. Lección 7: las matrices de variables. http://www.htcmania.com/showthread.php?p=9409867
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
|
| Los siguientes 2 usuarios han agradecido a Caravantes su comentario: | ||
|
#43
|
||||
|
||||
|
Gracias Caravantes. Muy atento y amable por tu parte!
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
#44
|
||||
|
||||
|
Ya. Y no veo ese 0 y ese 2 que "esperabas".
![]()
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
|
#45
|
||||
|
||||
|
Claro, es una cuestión de lógica: maid nos dice y cito:
El comando "cat" simplemente muestra el contenido del archivo que le digas, de modo que cuando ejecutamos Código: cat /proc/$(pgrep jackpal.androidterm$)/oom_adj primero resuelve el PID del proceso (recordemos en mi caso 25419), con lo que sería equivalente a ejecutar Código: cat /proc/25419/oom_adj que devolvería el estado de ejecución de ese proceso. Para el caso que nos interesa, un "0" significa que está en primer plano y un "2" en segundo plano, cualquier otro valor es que está en otro estado que podemos considerar como inactivo. Entonces, aplicando la lógica, si el almacenamiento del resultado de A1 reside en %pid, no veo descabellado el comando cat /proc/$(%pid$)/oom_adj. Aunque me acabo de dar cuenta de que un pgrep antes de %pid, igual va bien.
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
#46
|
||||
|
||||
|
Esto es desesperante. Me arroja cualquier resultado menos el que ando buscando! Me sé de uno que estará disfrutando!
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
#47
|
||||
|
||||
|
Este es el primer comando ... pgrep jackpal.androidterm ... que tiene como salida el PID del proceso (25419 en el ejemplo). Este es el segundo comando ... cat /proc/25419/oom_adj ... porque todo esto $(pgrep jackpal.androidterm$) se sustituye directamente por la salida del primer comando. Si separas esos dos comandos, tal y como has hecho en tu tarea. La salida del primer comando está guardada en %pid y no necesitas nada más que poner esa variable en el sitio en el que Maid puso lo que te he señalado en negrita, y nada más. Si no recuerdo mal el sistema OOM (out-of-memory) de Android puede tomar valores entre -16 y 16 (no estoy totalmente seguro). Los valores negativos están reservados para los procesos del sistema. Los positivos son para los procesos del usuario. Así que sí, te puedes encontrar muchos más resultados que ese 0/2 que esperabas.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
|
#48
|
||||
|
||||
|
Greenify (62)
A1: Ejecutar consola [ Comando:pgrep com.whatsapp Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ] A1 ejecuta este comando para averiguar el PID de whatsapp A2: Pop-Up [ Título: Texto:%pid Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ] Muestra en un Pop-up el resultado almacenado en %pid A3: Ejecutar consola [ Comando:cat /proc/%pid/oom_adj Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%memo Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ] A3 es la que más me ha costado. Pero ha habido una miga de pan tuya clave y te cito: "Si no recuerdo mal el sistema OOM (out-of-memory) de Android puede tomar valores entre -16 y 16 (no estoy totalmente seguro). Los valores negativos están reservados para los procesos del sistema. Los positivos son para los procesos del usuario. Así que sí, te puedes encontrar muchos más resultados que ese 0/2 que esperabas." Deduzco entonces que la ruta cat/ es necesaria, porque nos da una información valiosa sobre si es de usuario o de sistema. Aunque sigue sin arrojar un 0/2 como quería desde un principio. Sospecho que habrá que hacer un "inciso" en el comando. cat /proc/%pid/oom_adj para sacar ese 0/2 para averiguar si com.whatsapp está en memoria o no. Pero como dice el cholo, vamos partido a partido. El resultado lo almacenamos en %memo. A4: Pop-Up [ Título: Texto:%memo Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):6 Mostrar sobre bloqueo pantalla:Encendido ] Muestra resultado de %memo A5: Si (if) [ %memo > -17 & %memo < 17 ] Aquí viene una de las cosas interesantes: Si if %memo >-17 & %memo >17 He puesto 17 para que incluya el 16 porque no estaba seguro si los incluía. Así me aseguro. La idea es que, dependiendo de si es de usuario o de sistema, cierre el proceso com.whatsapp (aunque creo que seguimos sin saber si estaba o no en primer plano o segundo) A6: Ejecutar consola [ Comando:am force-stop %pid Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En: Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ] A6 fuerza el stop del %pid arrojado por A1 siempre y cuando se cumpla A5. A7: Fin si (End if) A ver, tal y como está la tarea, funciona. Le das a "play" y te fuerza el stop de com.whatsapp. Pero ocurren 2 cosas: no sabemos si el proceso com.whatsapp está en primer o segundo plano. Y además, se me ha ocurrido probar en el hipotético caso de que un proceso como com.UCMobile.intl tenga como vimos más de un PID. Esto provoca un error, cuando con un PID no ocurre. Pero bueno, vamos avanzando! Un saludo!
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
#49
|
||||
|
||||
|
Sólo para que quede claro. En este comando de consola ... cat /proc/%pid/oom_adj
cat ... es el comando propiamente dicho /proc/%pid/ ... es la ruta oom_adj ... es un archivo de texto Y sobre los valores del sistema OOM, creo que no me he explicado bien. Si el valor dentro del archivo oom_adj es negativo estás metiendo mano a un proceso del sistema, y NUNCA deberías "matar" un proceso del sistema. Un valor positivo indica que ese proceso es de usuario y tú decides lo que haces con tus procesos. El valor 0 parece que siempre indica que la aplicación está en primer plano. Lo que no parece tan claro es el valor que sale cuando la aplicación está en segundo plano, entendiendo que ese caso es el de una aplicación que no está visible pero que sigue funcionando, como un reproductor de música, o un avisador de radares, por poner un par de ejemplos. Eso es algo que deberías probar para tener claro qué valores debes comprobar en A5. Poner de -17 a +17 es lo mismo que decir "mata sin contemplaciones", y no es eso lo que quieres, ¿no?. Y eso de que un paquete tenga más de un PID ... sigo sin verlo muy claro. Si no recuerdo mal pgrep procesa expresiones regulares y tengo la sospecha de que el texto "com.UCMobile.intl" es común a más de un proceso. Abre un aventana de terminal y prueba esto ... "ps com.UCMobile.intl". Si te sale más de un proceso cambia A1 y pon esto ... pgrep com.UCMobile.intl$
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
|
#50
|
||||
|
||||
|
u0_a114@hwG7-L01:/ $ ps com.UCMobile.intl
USER PID PPID VSIZE RSS WCHAN PC NAME u0_a114@hwG7-L01:/ $ su root@hwG7-L01:/ # ps com.UCMobile.intl USER PID PPID VSIZE RSS WCHAN PC NAME root@hwG7-L01:/ # Esto es lo que me sale en el terminal. He borrado datos de la aplicación terminal porque no me cuadraban los datos y he vuelto a ejecutar el comando con el mismo resultado. Luego he añadido "su" pero ni por esas. Pero me fío de tu buena memoria y he probado en A1 pgrep com.UCMobile.intl$ y ahora sale un PID que es lo que buscábamos. Resulta curioso que al ejecutar la tarea el resultado almacenado en %memo es 2. Será que la aplicación está en segundo plano? Voy a probar com.whatsapp$ a ver qué resultado arroja. De todas formas, he predefinido un listado de apps que tranquilamente se les puede hacer un am force-stop sin problemas, por lo tanto, no hay riesgo de problemas. Voy a probar y te cuento Edito: he probado con whatsapp y el resultado es 11. Voy a ver qué apps tienen más de un PID
__________________
Si la educación te parece cara, prueba con la ignorancia.
Última edición por Mitrhandir Día 04/11/16 a las 11:24:35. |
|
#51
|
||||
|
||||
|
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
|
#52
|
||||
|
||||
|
Me he dado cuenta que si en el listado de apps que yo he recopilado hay alguna aplicación "muerta", "detenida" o sospecho que congelada, A3 da error.
Respuesta a tu mensaje anterior: u0_a114@hwG7-L01:/ $ su root@hwG7-L01:/ # ps | grep com.UCMobile.intl u0_a82 28928 360 1579164 57360 ffffffff b6e9072c S com.UCMobile.intl:channel u0_a82 28986 360 1556556 43228 ffffffff b6e9072c S com.UCMobile.intl:RemoteBackgroundProcess u0_a82 29050 360 1792728 184920 ffffffff b6e9072c S com.UCMobile.intl root@hwG7-L01:/ #
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
#53
|
||||
|
||||
|
root@hwG7-L01:/ # ps | grep com.UCMobile.intl
u0_a82 28928 360 1579164 57360 ffffffff b6e9072c S com.UCMobile.intl:channel u0_a82 28986 360 1556556 43228 ffffffff b6e9072c S com.UCMobile.intl:RemoteBackgroundProcess u0_a82 29050 360 1792728 184920 ffffffff b6e9072c S com.UCMobile.intl root@hwG7-L01:/ # ![]() Por si tienes curiosidad ese signo le indica a pgrep (realmente es al grep que incluye ese comando) que el texto "com.UCMobile.intl" lo debe intentar localizar ajustándose al final de la línea. De esa forma sólo "cuela" el último de la lista.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
| Gracias de parte de: | ||
|
#54
|
||||
|
||||
|
Hay alguna manera de entre el listado "filtrar" y dejar pasar sólo las que están en primer o segundo plano? Las apps detenidas, matadas o congeladas dan error. Se supone que cat /proc/%pid/oom_adj (vamos, según Maid) debe de decirnos 0=si está en primer plano, 2 si está en segundo plano. Pero en vez de eso, sólo sabemos si es de sistema o de usuario. Estoy muy atascado en este punto.
Estoy pensando en el "else" si if "desconocido" (%*) para tratar de dilucidar un poco.
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
#55
|
||||
|
||||
![]() Lo que tienes que tener previsto es cualquier resultado posible al hacer esa consulta. El valor 0 si está en primer plano. El valor 2 si está en segundo plano. Cualquier valor distinto a 0/2, que será cuando mates la aplicación. Y sin valor, que no deberías hacer nada para evitar ese error.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
|
#56
|
||||
|
||||
|
Sí pero cat /proc/%pid/oom_adj no me devuelve 0 ni 2
De todas formas, pruebo a ver...
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
#57
|
||||
|
||||
|
Pero si ya tienes todo lo que necesitas
![]() ¿Cuándo tienes que matar una aplicación? -Si al intentar conseguir su PID no lo consigues ... NO -Si el valor de oom_adj es negativo ... NO -Si el valor de oom_adj es 0 ... NO -Si el valor de oom_adj es 2 ... NO -Para cualquier otro valor de oom_adj ... SI
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
|
#58
|
||||
|
||||
|
Vale. Voy a tratar de hacer el perfil definitivo. Pero va estar complicado.
-Si al intentar conseguir su PID no lo consigues:No Si if noadjust %pid -Si el valor de oom_adj es negativo: No Si if %pid ~ -17 -Si el valor de oom_adj es 0: No Si if %pid~0 -Si el valor de oom_adj es 2: No Si if %pid ~ 2 -Para cualquier otro valor de oom_adj: Sí Si if %pid~%* am force-stop %pid Creo que los tiros van por ahí. Ahora a ver cómo lo plasmo!
__________________
Si la educación te parece cara, prueba con la ignorancia.
|
|
#59
|
||||
|
||||
|
Te falla si el valor es negativo. ¿Qué pasa si es -13, por ejemplo?
Y te sobra el último IF.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
|
|
|
#60
|
||||
|
||||
|
A ver, vamos por partes porque no lo entiendo.
En la primera foto he puesto como ejemplo el terminal que está en segundo plano (véase barra arriba a la izquierda). Bien, yo quiero que si cierro la tapa, el terminal se pare. Ojo, no quiero matar procesos, sólo parar. Bien, le doy a play y %pido me arroja un resultado de 2, por lo tanto, deduzco que la aplicación terminal está en segundo plano. Ahora bien, si yo pongo Si if %pido~2 am force-stop %pid, me sale en rojo, por lo que la tarea no se ejecuta. Pero si pongo Si if %pido no coincide con 2, se pone en verde y sí ejecuta la tarea, pero no me sirve de nada, pues no para la aplicación. No le veo ninguna lógica. ![]() Edito: donde pone am force-start es force-stop. Es una tarea que tengo para hacer pruebas. Edito: he puesto am kill, pero nada. Edito: cuando pgrep com.jackpal.androidterm no está ni en primer plano ni en segundo plano ni tiene ningún proceso abierto, A1 da error. La razón es porque no está en memoria. Cómo plasmo eso en una variable? Edito: cómo ignoramos los errores? Si ya están cerradas, para qué preocuparse? Hay que centrarse en las que están abiertas y/o en segundo plano.
__________________
Si la educación te parece cara, prueba con la ignorancia.
Última edición por Mitrhandir Día 05/11/16 a las 08:29:41. |
![]() |
Estás aquí
|
||||||
|
||||||