Ver la Versión Completa : [ CONSULTA ] Greenificar con Tasker
Mitrhandir
29/10/16, 23:50:55
Hola buenas! He hecho un perfil que cuando se apaga la pantalla haga un comando am force-stop de todas las apps que yo he predefinido. Ocurre que le cuesta bastante porque son muchas aplicaciones, muchas de las cuales ya están "paradas" ¿Cómo puedo hacer que sólo haga am force-stop con las aplicaciones que están abiertas en segundo plano? Gracias de antemano!
Un saludo para todos los foreros!
Caravantes
30/10/16, 11:12:17
¿Cómo puedo hacer que sólo haga am force-stop con las aplicaciones que están abiertas en segundo plano?
Mira el siguiente post del compañero Maid450. Ahí explica un truco para saber cuáles apps están abiertas en segundo plano.
http://www.htcmania.com/showthread.php?t=604736
En ese mismo hilo, otros comentarios posteriores añaden algunas explicaciones adicionales sobre el mismo tema.
SmartPhoneLover
30/10/16, 11:21:33
Bueno, como Caravantes se me ha adelantado...
Te iva a decir que uses el mismo sistema que menciona uno de los usuarios casi al final del post: el comando 'ps', el cual te indicará el número PID del proceso (app) que quieras. Luego usaría esa información de una tarea para comprobar su estado (junto a las demás apps = PIDs), y y decidir si hacer una acción u otra con condicionales. Por último el perifl, no sé tu situación ni como quieres hacerlo funcionar, pero lo pondría a demanda (pulsar un botón), o cada x tiempo.
Mitrhandir
30/10/16, 16:19:39
Hola! Gracias por vuestros comentarios!
He hecho el comando ps y me sale una lista más larga que un día sin pan! :risitas: A ver cómo gestiono esto!
Qué comando creéis que es lo contrario de am force-stop?
Un saludo!
SmartPhoneLover
30/10/16, 18:54:31
Debes agregar despues de 'ps' el nombre de la app, de esta manera optienes el PID único de esa app y de todas las instaladas. O puedes intentar con 'pidof nombre_app'. Con este último comando creo que tenias que tener corriendo en primer plano la app a analizar.
Mitrhandir
30/10/16, 21:20:40
Mirad a ver porque creo que está bien. Y creo que estoy siendo demasiado optimista.
Perfil: Pant Off (72)
Estado: Valor de variable [ %EstadoProximidad ~ on ]
Entrada: Greenify (62)
A1: Ejecutar consola [ Comando:ps Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%salida Almacenar Errores En: Almacenar Resultado en: ]
A2: Establecer variable [ Nombre:%salida A:0/2 Calcular:Encendido Añadir:Apagado ]
A3: Si (if) [ %salida ~ 0/2 ]
A4: Ejecutar consola [ Comando:am force-stop Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En: Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A5: Fin si (End if)
Un saludo!
Caravantes
31/10/16, 00:55:32
Mirad a ver porque creo que está bien. Y creo que estoy siendo demasiado optimista.
Efectivamente, te veo muy optimista. :platano:
Te voy a decir dos cosas que no entiendo sobre tu tarea, y/o que me parecen fallos:
A2: Establecer variable [ Nombre:%salida A:0/2 Calcular:Encendido Añadir:Apagado ]
Puesto que tienes encendido el gestor matemático (calcular), "0/2" es interpretado como una operación matemática, una división (cero dividido entre dos) y esa división da como resultado 0 (cero). O sea que... ese cero (0) es lo que se almacena en la variable %salida. Resumiendo, tu acción es equivalente a esta otra:
Establecer variable Nombre:%salida A:0 Calcular:Encendido o apagado (da igual); Añadir:Apagado
Y creo que eso no es lo que quieres. Por lo hablado anteriormente, sospecho que los valores cero y dos (0/2) son valores concretos esperados relacionados con el estado de alguna app que tal vez quieres detener. Creo que deberías desmarcar la casilla de CALCULAR.
A1: Ejecutar consola [ Comando:ps Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%salida Almacenar Errores En: Almacenar Resultado en: ]
A2: Establecer variable [ Nombre:%salida A:0/2 Calcular:Encendido Añadir:Apagado ]
Ejecutas un comando y le dices que ponga el texto de salida en la variable %salida. Ok. ¿Por qué a continuación ejecutas otra acción que cambia el resultado de esa variable? Con ello pierdes la información que habría sido generado el comando, y por tanto ya no sabes si la app estaba en segundo plano.
Sugerencia: Corrije lo que creas pertinente, y luego... Vuelve a poner la descripción de la tarea pero inserta comentarios para explicar lo que pretendes conseguir con cada acción. Quizá de ese modo podamos entender lo que quieres hacer con cada una de las acciones.
danko9696
31/10/16, 02:11:58
Espero que no lo tomes a mal pero ¿no piensas que será contraproducente detener los procesos en seco?, porque si no he entendido mal lo que estás haciendo es basicamente un task-killer con Tasker, no algo equivalente a greenify. ¿Por qué no usas el plugin de greenify?. O mejor aún, ¿por qué no lo haces con greenify sin Tasker?, que siendo root permite que las apps seleccionadas se hibernen pasados cinco minutos después de apagada la pantalla.
Detener aplicaciones no mejorará la batería, tan solo conseguirás que android las cargue de nuevo en cuanto pueda leyendo de la SD. O incluso quizás que una app que no tenga el proceso cargado en segundo plano en el momento de apagarse la pantalla y lanzarse la tarea sea cargada posteriormente con la pantalla apagada.
Si quieres hacer algo parecido a greenify sin greenify (aunque yo no lo haría) tendrías que deshabilitarlas-congelarlas en lugar de detenerlas (sea en segundo plano o del todo).
SmartPhoneLover
31/10/16, 07:59:01
- danko9696: lo que hace greenify no es usar el comando 'am' para detener una app en el modo hibernacion? Vamos, eso tengo entendido yo.
- Mithhandir: a lo que me referia es que, por un lado sacaras de manarea individual el PID de cada aplicación (no tiene que formar parte de la tarea final), luego incorporar el comando am force-stop agregando el pid de la app en la misma linea de comando, con su correspondiente condicional para detectar si la app esta ejecutándose o no.
Mitrhandir
31/10/16, 10:28:52
Buenas! Caravantes, tienes toda la razón y no entiendo cómo la marqué. Creo que me equivoqué al pulsar. Ya lo he corregido y trataré de hacer algo más decente. Huelga decir que me he metido de lleno con los comandos y estoy todo el día probando comandos en el terminal. Estoy muy enganchado!
Danko, no me molesta en absoluto tu comentario. Las críticas constructivas son siempre bienvenidas.
Greenify ejecuta el comando am force-stop (package name) y como entiendo que Tasker es una herramienta muy poderosa, quiero que Tasker greenifique y así me ahorro una app. Los task kills son la peor opción. No soy un obseso de la batería, simplemente y llanamente, quiero aprender y qué mejor forma que rodearme de sabios! Aparte de probar, probar y probar!
Mitrhandir
31/10/16, 10:29:18
-Mensaje duplicado por error -
danko9696
31/10/16, 12:58:15
Buenas! Caravantes, tienes toda la razón y no entiendo cómo la marqué. Creo que me equivoqué al pulsar. Ya lo he corregido y trataré de hacer algo más decente. Huelga decir que me he metido de lleno con los comandos y estoy todo el día probando comandos en el terminal. Estoy muy enganchado!
Danko, no me molesta en absoluto tu comentario. Las críticas constructivas son siempre bienvenidas.
Greenify ejecuta el comando am force-stop (package name) y como entiendo que Tasker es una herramienta muy poderosa, quiero que Tasker greenifique y así me ahorro una app. Los task kills son la peor opción. No soy un obseso de la batería, simplemente y llanamente, quiero aprender y qué mejor forma que rodearme de sabios! Aparte de probar, probar y probar!
No problemo. Por lo que he visto después yo estaba equivocado. Pensaba que el force-stop era funcionalmente lo mismo que el kill y no es así.
Mitrhandir
31/10/16, 14:11:04
Bueno, vamos a sentar las bases de lo que quiero hacer y espero que le sirva al cualquier forero.
A ver, se trata de que cuando se apague la pantalla y después de haber esperado un par de minutos, las aplicaciones que estén abiertas (almacenar salida en %salida) que yo previamente he reunido en un listado,(sé qué aplicaciones puedo greenificar y cuáles no) deben de ejecutar un comando de consola am force-stop Si if %salida~2).
Me falta algo y creo que es el PID que comenta el compañero Smart. Es decir, tendría que hacer un comando ps de todas las apps que yo he predefinido anteriormente.
Voy bien encaminado?
Un saludo!
Mitrhandir
31/10/16, 16:55:08
Bueno, aquí os dejo esto:
Perfil: Pant Off (72)
Estado: Valor de variable [ %EstadoProximidad ~ on ]
Entrada: Greenify (62)
A1: Ejecutar consola [ Comando:ps com.huawei.camera ;ps com.huawei.android.launcher ;ps com.oasisfeng.greenify ;ps com.android.mediacenter ;ps com.android.providers.telephony ;ps com.huawei.internetaudioservice ;ps com.huawei.audioautotest ;ps com.android.providers.calendar ;ps com.huawei.bluetooth ;ps com.android.providers.media ;ps com.huawei.android.thememanager ;ps com.huawei.android.ntp ;ps com.vito.lux ;ps com.google.android.onetimeinitializer ;ps com.huawei.autoinstallapkfrommcc ;ps com.qualcomm.shutdownlistner ;ps com.android.wallpapercropper ;ps com.huawei.android.FloatTasks ;ps com.joeykrim.rootcheckp ;ps com.huawei.motionservice ;ps org.simalliance.openmobileapi.service ;ps com.android.documentsui ;ps com.android.galaxy4 ;ps com.huawei.magnifier ;ps com.android.externalstorage ;ps com.huawei.android.FMRadio ;ps com.android.htmlviewer ;ps com.whatsapp ;ps com.android.mms.service ;ps com.android.providers.downloads ;ps com.huawei.privacymode ;ps eu.thedarken.sdm.unlocker ;ps com.google.android.configupdater ;ps com.android.soundrecorder ;ps com.huawei.KoBackup ;ps com.android.defcontainer ;ps com.flavionet.android.camera.pro ;ps com.android.providers.downloads.ui ;ps com.android.vending ;ps com.android.pacprocessor ;ps com.qualcomm.cabl ;ps com.huawei.hwvplayer ;ps com.android.certinstaller ;ps com.google.android.marvin.talkback ;ps com.huawei.cust ;ps com.android.contacts ;ps com.qualcomm.wfd.service ;ps com.android.nfc ;ps com.android.backupconfirm ;ps com.buak.Link2SD ;ps com.google.android.gm ;ps com.huawei.android.internal.app ;ps com.android.wallpaper.holospiral ;ps com.huawei.mmifunction ;ps com.huawei.omacp ;ps com.android.calendar ;ps com.android.phasebeam ;ps com.qualcomm.qcrilmsgtunnel ;ps com.android.providers.settings ;ps com.android.sharedstoragebackup ;ps com.android.printspooler ;ps com.android.dreams.basic ;ps com.android.incallui ;ps com.huawei.systemmanager ;ps com.android.webview ;ps com.android.inputdevices ;ps com.estrongs.android.pop ;ps com.socialnmobile.dictapps.notepad.color.note ;ps com.google.android.apps.cloudprint ;ps com.huawei.DiagReboot ;ps com.android.cellbroadcastreceiver ;ps com.google.android.webview ;ps com.android.server.telecom ;ps com.google.android.syncadapters.contacts ;ps com.android.keychain ;ps com.google.android.gms ;ps com.google.android.gsf ;ps com.huawei.hwstartupguide ;ps com.google.android.partnersetup ;ps com.android.packageinstaller ;ps com.huawei.qrcode.dispatcher ;ps com.android.proxyhandler ;ps com.UCMobile.intl ;ps com.google.android.feedback ;ps com.android.musicvis ;ps com.google.android.syncadapters.calendar ;ps com.android.managedprovisioning ;ps com.sika524.android.quickshortcut ;ps org.telegram.plus ;ps com.android.noisefield ;ps com.android.providers.partnerbookmarks ;ps com.huawei.android.hwouc ;ps com.google.android.gsf.login ;ps com.android.smspush ;ps com.huawei.android.wfdft ;ps com.android.wallpaper.livepicker ;ps org.blackmart.market ;ps com.huawei.mmitest ;ps com.android.apps.tag ;ps jackpal.androidterm ;ps com.google.android.backuptransport ;ps eu.thedarken.sdm ;ps com.android.settings ;ps com.shinycore.picsaypro ;ps com.android.calculator2 ;ps com.huawei.android.projectmenu ;ps the.pdfviewer3 ;ps com.android.vpndialogs ;ps com.qualcomm.location.XT ;ps com.alensw.PicFolder ;ps com.android.providers.userdictionary ;ps com.huawei.floatMms ;ps com.huawei.mmitest2 ;ps com.android.location.fused ;ps com.android.deskclock ;ps com.android.systemui ;ps com.android.bluetooth ;ps com.qualcomm.timeservice ;ps com.google.android.androidforwork ;ps com.android.providers.contacts ;ps com.android.captiveportallogin ;ps com.yoigo.miyoigo ;ps com.huawei.android.airsharing Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%salida Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
Con A1 pretendo hacer un comando ps de sólo las aplicaciones (que he listado yo) que sé que se pueden greenificar con seguridad para arrojar un resultado a %salida
A2: Pop-Up [ Título: Texto:%salida
Con el Pop-up quiero ver el resultado que arroja %salida
A3: Si (if) [ %salida ~ 0/2 ]
Aquí estamos condicionando a que si la salida coincide con 0(primer plano) y 2(segundo plano)
A4: Ejecutar consola [ Comando:am force-stop Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En: Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
Entonces, supuestamente, el comando am force-stop se habría aplicado en aquellas aplicaciones que su %salida haya coincidido con 0 y 2
A5: Fin si (End if)
Fin de tarea
Ya me contáis cómo lo veis, porque seguro que se puede mejorar.
Un saludo compañeros
WillyWeb
31/10/16, 18:55:06
No estoy muy puesto en el tema, pero no me suena que el comando "ps" devuelva directamente esos valores 0/2 que indicarían en qué estado está una aplicación. Lo que "ps" retorna es un listado con varios datos sobre las aplicaciones en memoria. Para saber si una aplicación está en primer/segundo plano (que es lo que te interesa) te lo tendrás que currar un poco más. Creo que ya te han puesto el enlace a un hilo en el que se trataba el tema... no te digo más :silbando:
Una vez que tengas clara la forma de saber si una aplicación se está ejecutando en primer/segundo plano yo intentaría algo así...
Mete esa lista en una variable separando el nombre de cada paquete con algo reconocible (el punto y coma puede valer).
Divide esa variable por ese separador para generar un array.
Recorre el array, elemento por elemento, para determinar si cada uno de los paquetes está en ejecución (usando el sistema que necesites). De esa forma, a cada vuelta del bucle, tendrás una %salida con esos valores 0/2 que andas buscando.
Dependiendo del resultado anterior "mata" esa aplicación con ese comando "am force-stop".
Ya sabes ... poco a poco.
Mitrhandir
31/10/16, 19:37:53
A ver, que esto se complica... :risitas:
He ejecutado esto:
pgrep com.huawei.camera ;pgrep com.huawei.android.launcher ;pgrep com.oasisfeng.greenify ;pgrep com.android.mediacenter ;pgrep com.android.providers.telephony ;pgrep com.huawei.internetaudioservice ;pgrep com.huawei.audioautotest ;pgrep com.android.providers.calendar ;pgrep com.huawei.bluetooth ;pgrep com.android.providers.media ;pgrep com.huawei.android.thememanager ;pgrep com.huawei.android.ntp ;pgrep com.vito.lux ;pgrep com.google.android.onetimeinitializer ;pgrep com.huawei.autoinstallapkfrommcc ;pgrep com.qualcomm.shutdownlistner ;pgrep com.android.wallpapercropper ;pgrep com.huawei.android.FloatTasks ;pgrep com.joeykrim.rootcheckp ;pgrep com.huawei.motionservice ;pgrep org.simalliance.openmobileapi.service ;pgrep com.android.documentsui ;pgrep com.android.galaxy4 ;pgrep com.huawei.magnifier ;pgrep com.android.externalstorage ;pgrep com.huawei.android.FMRadio ;pgrep com.android.htmlviewer ;pgrep com.cootek.smartinputv5 ;pgrep com.whatsapp ;pgrep com.android.mms.service ;pgrep com.android.providers.downloads ;pgrep com.huawei.privacymode ;pgrep com.huawei.securitymgr ;pgrep eu.thedarken.sdm.unlocker ;pgrep com.google.android.configupdater ;pgrep com.android.soundrecorder ;pgrep com.huawei.KoBackup ;pgrep com.android.defcontainer ;pgrep com.flavionet.android.camera.pro ;pgrep com.android.providers.downloads.ui ;pgrep com.android.vending ;pgrep com.android.pacprocessor ;pgrep com.qualcomm.cabl ;pgrep com.huawei.hwvplayer ;pgrep com.android.certinstaller ;pgrep com.google.android.marvin.talkback ;pgrep com.huawei.cust ;pgrep com.android.contacts ;pgrep com.qualcomm.wfd.service ;pgrep com.android.nfc ;pgrep com.android.stk ;pgrep com.android.backupconfirm ;pgrep com.buak.Link2SD ;pgrep com.google.android.gm ;pgrep com.huawei.android.internal.app ;pgrep com.android.wallpaper.holospiral ;pgrep com.huawei.mmifunction ;pgrep com.huawei.omacp ;pgrep com.android.calendar ;pgrep com.android.phasebeam ;pgrep com.qualcomm.qcrilmsgtunnel ;pgrep com.android.providers.settings ;pgrep com.android.sharedstoragebackup ;pgrep com.android.printspooler ;pgrep com.android.dreams.basic ;pgrep com.android.incallui ;pgrep com.huawei.systemmanager ;pgrep com.android.webview ;pgrep com.android.inputdevices ;pgrep com.estrongs.android.pop ;pgrep com.socialnmobile.dictapps.notepad.color.note ;pgrep com.google.android.apps.cloudprint ;pgrep com.huawei.DiagReboot ;pgrep com.android.cellbroadcastreceiver ;pgrep com.google.android.webview ;pgrep com.android.server.telecom ;pgrep com.google.android.syncadapters.contacts ;pgrep com.android.keychain ;pgrep com.android.keyguard ;pgrep com.google.android.gms ;pgrep com.google.android.gsf ;pgrep com.huawei.hwstartupguide ;pgrep com.google.android.partnersetup ;pgrep com.android.packageinstaller ;pgrep com.huawei.qrcode.dispatcher ;pgrep com.android.proxyhandler ;pgrep com.UCMobile.intl ;pgrep com.google.android.feedback ;pgrep com.android.musicvis ;pgrep com.google.android.syncadapters.calendar ;pgrep com.android.managedprovisioning ;pgrep com.sika524.android.quickshortcut ;pgrep org.telegram.plus ;pgrep com.android.noisefield ;pgrep com.android.providers.partnerbookmarks ;pgrep com.huawei.android.hwaps ;pgrep com.huawei.android.hwouc ;pgrep com.google.android.gsf.login ;pgrep com.android.smspush ;pgrep com.huawei.android.wfdft ;pgrep com.android.wallpaper.livepicker ;pgrep org.blackmart.market ;pgrep com.huawei.mmitest ;pgrep com.android.apps.tag ;pgrep com.huawei.powergenie ;pgrep eu.chainfire.supersu.pro ;pgrep jackpal.androidterm ;pgrep com.google.android.backuptransport ;pgrep eu.thedarken.sdm ;pgrep com.android.settings ;pgrep com.shinycore.picsaypro ;pgrep com.android.calculator2 ;pgrep com.huawei.android.projectmenu ;pgrep com.futurewei.ecens.mocalite ;pgrep com.qualcomm.location ;pgrep the.pdfviewer3 ;pgrep com.fingerprints.service ;pgrep com.android.vpndialogs ;pgrep com.qualcomm.location.XT ;pgrep com.android.phone ;pgrep com.android.shell ;pgrep com.alensw.PicFolder ;pgrep com.android.providers....
Y el resultado me ha dejado un poco extrañado:
6543
28714
1462
17963
18007
1735
18132
18562
19289
19326
10241
17888
1753
18132
18562
541
11465
32565
28895
1778
7311
18054
1819
1588
1444
1841
1329
Es decir, que no me salen todos los PID'S. Sospecho que los de sistema no salen, sólo los de usuario.
He probado con una aplicación de sistema (pgrep com.huawei.camera) y el resultado es 1.
Me podéis ayudar? Estoy confuso.
WillyWeb
31/10/16, 22:10:06
Es decir, que no me salen todos los PID'S. Sospecho que los de sistema no salen, sólo los de usuario.
He probado con una aplicación de sistema (pgrep com.huawei.camera) y el resultado es 1.
La lista no puede contener los PID de las aplicaciones que no están en memoria, por eso no te salen las cuentas.
Creo que no tienes claro lo que hace "pgrep"...
http://rm-rf.es/el-comando-pgrep/
Mitrhandir
01/11/16, 13:02:02
Muy revelador el artículo! Gracias compi! Estoy compilando y me va a llevar un poco de tiempo (lo hago todo con el móvil). Como lo tenía todo greenificado con Greenify, el comando pgrep no funciona con todos los package names. Voy haciendo y os comento!
Mitrhandir
02/11/16, 16:57:22
Perfil: Greenify (72)
Estado: Valor de variable [ %EstadoProximidad ~ on ]
Entrada: Greenify (62)
A1: Ejecutar consola [ Comando:cat /proc/24995/oom_adj ;cat /proc/7261/oom_adj ;cat /proc/21973/oom_adj ;cat /proc/2473/oom_adj ;cat /proc/4869/oom_adj ;cat /proc/3505/oom_adj ;cat /proc/20557/oom_adj ;cat /proc/19688/oom_adj ;cat /proc/21077/oom_adj ;cat /proc/14978/oom_adj ;cat /proc/18907/oom_adj ;cat /proc/20255/oom_adj ;cat /proc/19922/oom_adj ;cat /proc/22476/oom_adj ;cat /proc/22532/oom_adj ;cat /proc/21457/oom_adj ;cat /proc/22965/oom_adj ;cat /proc/23193/oom_adj ;cat /proc/23876/oom_adj ;cat /proc/23976/oom_adj ;cat /proc/23458/oom_adj ;cat /proc/23033/oom_adj ;cat /proc/24371/oom_adj ;cat /proc/24282/oom_adj ;cat /proc/14579/oom_adj ;cat /proc/24645/oom_adj ;cat /proc/25255/oom_adj ;cat /proc/25326/oom_adj ;cat /proc/25769/oom_adj ;cat /proc/24412/oom_adj ;cat /proc/23605/oom_adj ;cat /proc/25289/oom_adj ;cat /proc/27001/oom_adj ;cat /proc/27615/oom_adj ;cat /proc/20092/oom_adj ;cat /proc/28519/oom_adj ;cat /proc/28541/oom_adj ;cat /proc/25120/oom_adj ;cat /proc/28731/oom_adj ;cat /proc/32755/oom_adj ;cat /proc/2066/oom_adj ;cat /proc/4658/oom_adj ;cat /proc/1735/oom_adj ;cat /proc/5073/oom_adj ;cat /proc/5238/oom_adj ;cat /proc/18567/oom_adj ;cat /proc/18631/oom_adj ;cat /proc/7225/oom_adj ;cat /proc/5073/oom_adj ;cat /proc/5238/oom_adj ;cat /proc/19559/oom_adj ;cat /proc/5562/oom_adj ;cat /proc/7195/oom_adj ;cat /proc/6550/oom_adj ;cat /proc/1483/oom_adj ;cat /proc/8425/oom_adj ;cat /proc/10716/oom_adj ;cat /proc/4232/oom_adj ;cat /proc/9593/oom_adj ; Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%salida Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Si (if) [ %salida ~ 0/2 ]
A3: Ejecutar consola [ Comando:am force-stop Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En: Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A4: Fin si (End if)
A1 me da error y estoy un poco fustrado porque me ha llevado 2 días (en mis ratos sueltos) conseguir esto.
Qué es lo que falla? Dejo descripción del error:
16.55.36/E Ejecutar consola: %salida -> %salida
16.55.36/E Ejecutar consola: ->
16.55.36/E Ejecutar consola: ->
16.55.36/Shell runBackground cat /proc/24995/oom_adj ;cat /proc/7261/oom_adj ;cat /proc/21973/oom_adj ;cat /proc/2473/oom_adj ;cat /proc/4869/oom_adj ;cat /proc/3505/oom_adj ;cat /proc/20557/oom_adj ;cat /proc/19688/oom_adj ;cat /proc/21077/oom_adj ;cat /proc/14978/oom_adj ;cat /proc/18907/oom_adj ;cat /proc/20255/oom_adj ;cat /proc/19922/oom_adj ;cat /proc/22476/oom_adj ;cat /proc/22532/oom_adj ;cat /proc/21457/oom_adj ;cat /proc/22965/oom_adj ;cat /proc/23193/oom_adj ;cat /proc/23876/oom_adj ;cat /proc/23976/oom_adj ;cat /proc/23458/oom_adj ;cat /proc/23033/oom_adj ;cat /proc/24371/oom_adj ;cat /proc/24282/oom_adj ;cat /proc/14579/oom_adj ;cat /proc/24645/oom_adj ;cat /proc/25255/oom_adj ;cat /proc/25326/oom_adj ;cat /proc/25769/oom_adj ;cat /proc/24412/oom_adj ;cat /proc/23605/oom_adj ;cat /proc/25289/oom_adj ;cat /proc/27001/oom_adj ;cat /proc/27615/oom_adj ;cat /proc/20092/oom_adj ;cat /proc/28519/oom_adj ;cat /proc/28541/oom_adj ;cat /proc/25120/oom_adj ;cat /proc/28731/oom_adj ;cat /proc/32755/oom_adj ;cat /proc/2066/oom_adj ;cat /proc/4658/oom_adj ;cat /proc/1735/oom_adj ;cat /proc/5073/oom_adj ;cat /proc/5238/oom_adj ;cat /proc/18567/oom_adj ;cat /proc/18631/oom_adj ;cat /proc/7225/oom_adj ;cat /proc/5073/oom_adj ;cat /proc/5238/oom_adj ;cat /proc/19559/oom_adj ;cat /proc/5562/oom_adj ;cat /proc/7195/oom_adj ;cat /proc/6550/oom_adj ;cat /proc/1483/oom_adj ;cat /proc/8425/oom_adj ;cat /proc/10716/oom_adj ;cat /proc/4232/oom_adj ;cat /proc/9593/oom_adj ; root: true timeout: -1
16.55.36/Shell start process-thread ID 8022
16.55.36/E add wait type Shell3 time 2147483647
16.55.36/E add wait type Shell3 done
Ya me dais vuestra opinión!
Un saludo!
Caravantes
02/11/16, 17:50:54
Qué es lo que falla?
Yo sé muy poco de Linux, y no sabría decirte qué está mal. Pero creo que te pasas de ambicioso tratando de hacer una tarea que procese ciento y pico apps. ¿Por qué no pruebas primero con una sola app? Cuando hayas conseguido que eso funcione con una app, luego ya haces la ampliación de la tarea. Paso a paso, empieza por lo más sencillo y deja lo complejo para cuando ya hayas aprendido el primer paso. Es una sugerencia.
WillyWeb
02/11/16, 19:18:47
Qué es lo que falla?...
Ya me dais vuestra opinión!
Un saludo!
Creo que no has entendido correctamente el proceso para obtener el PID de una aplicación/proceso. Ese PID no es siempre el mismo. Puede cambiar con cada ejecución de la aplicación, así que construir un mega-comando con todos esos PID no te vale de mucho. Es muy probable (aunque no te lo puedo asegurar) que el fallo sea precisamente ese, que estás intentando leer el contenido del "oom_adj" de un número de proceso que no existe.
En mi primer mensaje del día 31 ya expliqué la estrategia que yo seguiría para abordar este asunto ... esa sigue siendo mi opinión.
:silbando:
Mitrhandir
02/11/16, 19:42:04
Acabo de caer en lo del PID y ya he reconvertido todo a como este ejemplo:
cat /proc/$(pgrep com.vito.lux$)/oom_adj
Pero me sigue dando error.
Bien, volviendo a tu primer mensaje:
Una vez que tengas clara la forma de saber si una aplicación se está ejecutando en primer/segundo plano yo intentaría algo así...
Mete esa lista en una variable separando el nombre de cada paquete con algo reconocible (el punto y coma puede valer).
Divide esa variable por ese separador para generar un array.
Recorre el array, elemento por elemento, para determinar si cada uno de los paquetes está en ejecución (usando el sistema que necesites). De esa forma, a cada vuelta del bucle, tendrás una %salida con esos valores 0/2 que andas buscando.
Dependiendo del resultado anterior "mata" esa aplicación con ese comando "am force-stop".
En una variable, pero cuál? Establecer variable? Sobre arrays soy neófito completamente. Nunca los he tocado!
Caravantes, sí, suelo pecar de ambicioso :risitas: pero ahora no puedo frenar! Agradezco tus consejos un montón, pero no-sé-qué-estoy-haciendo-mal... Pero también soy muy cabezón!
WillyWeb
02/11/16, 19:46:37
Acabo de caer en lo del PID y ya he reconvertido todo a como este ejemplo:
cat /proc/$(pgrep com.vito.lux$)/oom_adj
Pero me sigue dando error.
¿Seguro que eso es correcto?. ¿No sería más fácil sacar primero el PID y luego hacer algo así ... cat /proc/%pid/oom_adj ...?
Mitrhandir
02/11/16, 20:45:20
Apruebas (44)
A1: Ejecutar consola [ Comando:pgrep eu.thedarken.sdm.unlocker ;pgrep com.android.providers.telephony ;pgrep com.huawei.internetaudioservice ;pgrep com.android.providers.media ;pgrep com.huawei.audioautotest ;grep com.google.android.onetimeinitializer ;pgrep com.huawei.autoinstallapkfrommcc ;pgrep com.qualcomm.shutdownlistner ;pgrep com.android.wallpapercropper ;pgrep com.huawei.android.FloatTasks ;pgrep org.simalliance.openmobileapi.service ;pgrep com.android.documentsui ;pgrep com.android.galaxy4 ;pgrep com.android.providers.telephony ;pgrep com.android.providers.media ;pgrep com.huawei.audioautotest ;pgrep com.android.externalstorage ;pgrep com.android.htmlviewer ;pgrep com.android.mms.service ;pgrep com.android.providers.downloads ;pgrep com.huawei.privacymode ;pgrep com.google.android.configupdater ;pgrep com.android.providers.downloads.ui ;pgrep com.android.pacprocessor ;pgrep com.qualcomm.cabl ;pgrep com.android.certinstaller ;grep com.google.android.marvin.talkback ;pgrep com.huawei.cust ;pgrep com.qualcomm.wfd.service ;pgrep com.android.stk ;pgrep com.android.backupconfirm ;pgrep com.huawei.android.internal.app ;pgrep com.android.wallpaper.holospiral ;pgrep com.huawei.mmifunction ;pgrep com.huawei.omacp ;pgrep com.android.phasebeam ;pgrep com.qualcomm.qcrilmsgtunnel ;pgrep com.android.providers.settings ;pgrep com.android.sharedstoragebackup ;pgrep com.android.printspooler ;pgrep com.android.dreams.basic ;pgrep com.android.incallui ;pgrep com.android.webview ;pgrep com.android.inputdevices ;pgrep com.google.android.apps.cloudprint ;pgrep com.huawei.DiagReboot ;pgrep com.google.android.webview ;pgrep com.android.server.telecom ;pgrep com.google.android.syncadapters.contacts ;pgrep com.android.keychain ;pgrep com.google.android.gsf ;pgrep com.huawei.hwstartupguide ;pgrep com.google.android.partnersetup ;pgrep com.android.packageinstaller ;pgrep com.huawei.qrcode.dispatcher ;pgrep com.android.proxyhandler ;pgrep com.google.android.feedback ;pgrep com.android.musicvis ;grep com.google.android.syncadapters.calendar ;pgrep com.android.managedprovisioning ;pgrep com.android.noisefield ;pgrep com.android.providers.partnerbookmarks ;pgrep com.huawei.android.hwaps ;pgrep com.google.android.gsf.login ;pgrep com.android.smspush ;pgrep com.android.wallpaper.livepicker ;pgrep com.huawei.mmitest ;pgrep com.android.apps.tag ;pgrep com.google.android.backuptransport ;pgrep com.huawei.android.projectmenu ;pgrep com.qualcomm.location ;pgrep com.android.vpndialogs ;pgrep com.qualcomm.location.XT ;pgrep com.android.providers.userdictionary ;pgrep com.huawei.floatMms ;pgrep com.huawei.mmitest2 ;pgrep com.android.location.fused ;pgrep com.android.deskclock ;pgrep com.google.android.androidforwork ;pgrep com.android.providers.contacts ;pgrep com.android.captiveportallogin ;pgrep com.huawei.android.airsharing Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Ejecutar consola [ Comando:cat /proc/$(%pid$)/oom_adj Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%salida Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
La idea es genial. A1 funciona, pero A2 no. He estado probando y si la aplicación esta en primer plano, todo perfecto. Ahora bien, como esté "detenida", da error.
Yo creo, que con permiso de todos, quisiera invitar a este debate a maid450 para que aporte su punto de vista.
Un saludo!
WillyWeb
02/11/16, 21:20:16
Insistes en procesar toda la lista de una vez y así no te enteras de dónde está el fallo. Ya te he dicho que hagas las cosas poco a poco y Caravantes te ha sugerido que hagas las pruebas con una aplicación y luego añadas el resto.
¿Existe algún motivo para que lo tengas que hacer todo de una vez?
Y no es necesario invitar a nadie. Esto es un foro y todo el mundo puede participar, o no, libremente.
Y pagar cervezas :silbando:
WillyWeb
02/11/16, 21:33:06
La idea es genial. A1 funciona, pero A2 no. He estado probando y si la aplicación esta en primer plano, todo perfecto. Ahora bien, como esté "detenida", da error.
¿Y te extraña? :loco:
¿Has mirado el contenido de %pid antes de usarlo en A2?
¿Has comprobado si ... cat /proc/$(%pid$)/oom_adj ... es la forma de escribir ese comando?
Escucha maid450, tus aportaciones siempre son valiosas y sabes que tu participación siempre es bien recibida, pero no se te ocurra dar la solución ... que se lo curre un poco más. :grin:
Mitrhandir
02/11/16, 21:59:01
A ver, vamos poco a poco.
He estado probando de una en una y me he dado cuenta de que si están totalmente "paradas" es cuando da error. Pero si está en primer plano o segundo, ejecuta el comando sin problemas. He hecho lo que me ha dicho Caravantes, porque de lo contrario, no hubiera llegado a esta conclusión.
A1 funciona y supuestamente almacena el resultado en %pid. Hasta todo bien.
A2 es harina de otro costal. Me está volviendo loco, porque estoy probando y probando, pero no doy con la tecla.
Me das más miguitas de pan?
WillyWeb
02/11/16, 22:06:58
He estado probando de una en una y me he dado cuenta de que si están totalmente "paradas" es cuando da error. Pero si está en primer plano o segundo, ejecuta el comando sin problemas.
Evidentemente calamar. No se puede obtener el PID de una aplicación que no se está ejecutando. Y si no tienes un PID, por que no se está ejecutando, cómo quieres comprobar si está en primer/segundo plano ¿...? :rolleyes:
Has planteado el problema y la solución tú mismo...
IF %pid no-tiene-nada
error (la app no se está ejecutando)
ELSE
comprueba-estado
ENDIF
¿Qué más quieres? ;-)
Mitrhandir
02/11/16, 22:42:27
A ver, tiro p'alante y lo que tenga que ser será. Pero las collejas que me van a caer....
Si(if) %pid no coincide con 0
Ejecutar comando am force-stop
Else
Pop-up %pid
Voy a probar mientras me preparo para las collejas
Mitrhandir
03/11/16, 08:17:52
Siendo sincero, no sé para dónde tirar. Ahora es cuando vienen los arrays no? No los he utilizado nunca. Lo que me hace falta ya no son las migas, sino la barra de pan entera! :risitas:
WillyWeb
03/11/16, 09:25:57
Me parece que mucho quieres correr.
A1 funciona y supuestamente almacena el resultado en %pid ...
¿Supuestamente? :oh:
Tienes que saber qué contiene %pid cuando la aplicación está, y no está, en memoria. Ya estás haciendo pruebas hasta que lo tengas claro. Ese IF que te he propuesto lo tienes que hacer en función del resultado.
A2 es harina de otro costal. Me está volviendo loco, porque estoy probando y probando, pero no doy con la tecla.
Probar hasta que suene la flauta no es la mejor manera de encontrar la solución. Lo mismo tardas media vida en dar con ella. :sisi1:
Ya te he preguntado dos veces si esto ... cat /proc/$(%pid$)/oom_adj ... es correcto ¿Has comprobado que funciona asignando a %pid un valor correcto?
Y una vez comprobado que funciona, ¿qué resultado te sale?. En función de ese resultado tienes que matar, o no, la aplicación.
Siendo sincero, no sé para dónde tirar.
Pero eso no es de ahora. :risitas:
Ahora es cuando vienen los arrays no? No los he utilizado nunca. Lo que me hace falta ya no son las migas, sino la barra de pan entera! :risitas:
De momento no te hacen falta, pero puedes ir estudiando...
http://tasker.dinglisch.net/userguide/en/variables.html (mira al final de la página)
y en el recopilatorio me suena que también tienes algo.
Mitrhandir
03/11/16, 10:10:41
Esto es lo más cerca que estoy
Greenify (62)
A1: Ejecutar consola [ Comando:pgrep com.oasisfeng.greenify ;pgrep com.vito.lux ;pgrep com.joeykrim.rootcheckp ;pgrep com.whatsapp ;pgrep com.buak.Link2SD ;pgrep com.huawei.systemmanager ;pgrep com.socialnmobile.dictapps.notepad.color.note ;pgrep com.UCMobile.intl ;pgrep org.telegram.plus ;pgrep jackpal.androidterm ;pgrep eu.thedarken.sdm ;pgrep com.shinycore.picsaypro ;pgrep the.pdfviewer3 ;pgrep com.alensw.PicFolder ;pgrep com.yoigo.miyoigo ;pgrep com.flavionet.android.camera.pro ;pgrep com.android.bluetooth ;pgrep com.android.calculator2 ;pgrep com.android.settings ;pgrep com.huawei.camera ;pgrep com.huawei.android.launcher ;pgrep com.android.mediacenter ;pgrep com.android.providers.calendar ;pgrep com.huawei.bluetooth ;pgrep com.huawei.android.thememanager ;pgrep com.huawei.motionservice ;pgrep com.huawei.magnifier ;pgrep com.huawei.android.FMRadio ;pgrep com.android.soundrecorder;pgrep com.huawei.KoBackup ;pgrep com.android.defcontainer ;pgrep com.android.vending ;pgrep com.huawei.hwvplayer ;pgrep com.android.contacts ;pgrep com.android.nfc ;pgrep com.google.android.gm ;pgrep com.android.calendar ;pgrep com.estrongs.android.pop ;pgrep com.android.cellbroadcastreceiver ;pgrep com.google.android.gms ;pgrep com.sika524.android.quickshortcut ;pgrep com.huawei.android.hwouc :com.huawei.android.wfdft ;pgrep org.blackmart.market ;pgrep com.android.systemui ;pgrep com.qualcomm.timeservice ;pgrep com.huawei.autoinstallapkfrommcc ;pgrep com.huawei.autoinstallapkfrommcc ;pgrep org.simalliance.openmobileapi.service ;pgrep com.android.documentsui ;pgrep com.huawei.DiagReboot ;pgrep com.android.smspush Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Pop-Up [ Título: Texto:%pid Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):5 Mostrar sobre bloqueo pantalla:Encendido ]
A3: Si (if) [ %pid !~ 0 ]
A4: 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 ]
A5: Fin si (End if)
A6: Pop-Up [ Título: Texto:%pid Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):5 Mostrar sobre bloqueo pantalla:Encendido ]
Aunque el comando am force-stop (%pid) me da error, siento que estoy cerca. Me estoy rompiendo la cabeza pensando con este perfil. Y me gusta!
WillyWeb
03/11/16, 11:24:47
Tú insistes en hacer el mega-comando y yo en que hagas las pruebas con UN SÓLO PAQUETE ... ¿quién se cansará primero? :silbando:
Cuando entiendas que no seguimos hasta que hagas las pruebas con UN SÓLO PAQUETE me dices lo que sale en %pid (el resultado de A2).
Y cuando tengas claro ese contenido de %pid me dices si el IF de A3 tiene sentido y si el error de A4 tiene explicación.
Y estudia lo de los arrays, que lo mismo te hacen falta.
:cucu:
Mitrhandir
03/11/16, 11:50:58
Greenify (62)
A1: Ejecutar consola [ Comando:pgrep com.UCMobile.intl Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Pop-Up [ Título: Texto:%pid Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):5 Mostrar sobre bloqueo pantalla:Encendido ]
A3: Si (if) [ %pid !~ 0 ]
A4: 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 ]
A5: Fin si (End if)
A6: Pop-Up [ Título: Texto:%pid Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
Vaaaale. Perdón. El resultado de A1 es:
6663
7043
7735
9860
He elegido este package name porque siempre tiene varios procesos abiertos. Entonces, tenemos 4 pid's de una aplicación que está en memoria. He puesto Si if no coincide con 0 porque a mi entender 0 es nada. Pero ahora estoy dudando de si tendría que ser Si if nig 0.
El error de A4 evidentemente es un error mío de planteamiento, aunque no sé cómo incluir el %pid ni en el am force-stop ni en el comando cat /proc/$(%pid$)/oom_adj ,porque no sé si se podría convertir el valor de %pid a un "package name global". Si más o menos l tengo todo claro, pero tengo que ponerme las pilas con los planteamientos y las herramientas de las que dispongo.
Gracias por vuestra ayuda! :dios:
WillyWeb
03/11/16, 13:21:56
El resultado de A1 es:
6663
7043
7735
9860
¿Seguro que sale más de un PID? :rolleyes: ... puede ser, pero no estoy seguro y no lo puedo comprobar fácilmente (no soy root y no tengo pgrep).
Suponiendo que sea posible, vamos a empezar con algo sencillo ... un paquete que tiene cuatro PIDs :loco:
He puesto Si if no coincide con 0 porque a mi entender 0 es nada. Pero ahora estoy dudando de si tendría que ser Si if nig 0.
Está muy bien eso de que tú entiendes que 0 es nada, pero esa no es la cuestión. ¿Qué valor devuelve pgrep cuando le pides el PID de un paquete que no existe o que no se está ejecutando? Has dado por supuesto que devuelve 0, pero podría ser que devolviese "ese-paquete-no-existe-carajo". ¿Qué tendrías que poner entonces en el IF? :palomitas:
El error de A4 evidentemente es un error mío de planteamiento, aunque no sé cómo incluir el %pid ni en el am force-stop ni en el comando cat /proc/$(%pid$)/oom_adj...
Pues si tienes cuatro PIDs tendrás que hacer cuatro comandos "cat" ... ¿no? :silbando:
Prueba y nos dices qué te sale con cada uno de ellos.
... porque no sé si se podría convertir el valor de %pid a un "package name global".
Si se pudiese usar el nombre del paquete, ¿para qué necesitarías el PID? :oh:
Si más o menos l tengo todo claro, pero tengo que ponerme las pilas con los planteamientos y las herramientas de las que dispongo.
Si tú lo dices. :silbando:
Mitrhandir
03/11/16, 15:02:03
Sí, salen 4 pid's. Este navegador tiene demasiados servicios. El caso es que ahora me salen otros pid's distintos :oh:
No tengo ni idea de qué símbolo y/o señal/palabra podría sustituir a "ese-paquete-no-existe-carajo".
Ahora me salen 3 pid's, para los cuales he creado 3 comandos cat / y me dan error. cat /proc/$(25211$)/oom_adj este es uno de ellos. Voy a mirar la página de maid que me recomendó Caravantes. Lo de los arrays está en inglés y yo me llevo muy mal con ese idioma.
Mitrhandir
03/11/16, 16:37:04
Releyendo el post de maid, en una de las intervenciones de Caravantes, he descubierto Si if %salida~%* . Será esto lo que ando buscando?
Mitrhandir
03/11/16, 17:12:08
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 ]
Ejecutamos comando para averiguar PID de com.whatsapp y el resultado se almacena en %pid
A2: Pop-Up [ Título: Texto:%pid Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
Un Pop-up con el resultado de A1
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 ]
Bien, este comando nos ha de proporcionar como resultado 0 (primer plano) o 2 (segundo plano) y almacena resultados en %memo (de memoria, no malpenséis)
A4: Si (if) [ %memo ~ 0/2 ]
Ergo, si %memo coincide con 0 ó 2
A5: 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 ]
Debería ejecutar comando am force-stop del %pid
A6: Else Si (if) [ %memo ~ %* ]
Pero si %memo arroja un resultado que no se sabe qué es (es un suponer, pero si sé que * equivale a un comodín.
A7: 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 ]
Este lo he puesto por poner algo: primero me interesa resolver lo de arriba.
A8: Fin si (End if)
WillyWeb
03/11/16, 17:31:42
Sí, salen 4 pid's. Este navegador tiene demasiados servicios. El caso es que ahora me salen otros pid's distintos :oh:
No te sorprendas. Ya te lo había dicho en el post #21. Ves, yo no me he sorprendido. :sisi1:
No tengo ni idea de qué símbolo y/o señal/palabra podría sustituir a "ese-paquete-no-existe-carajo".
Pues no te puedo decir. Sigo sin ver el contenido de la variable %pid cuando el paquete no existe y/o no se está ejecutando. :silbando:
Ahora me salen 3 pid's, para los cuales he creado 3 comandos cat / y me dan error. cat /proc/$(25211$)/oom_adj este es uno de ellos. Voy a mirar la página de maid que me recomendó Caravantes.
Supongo que has comprobado que en el momento de ejecutar ese comando el PID existía. Y supongo que has comprobado que estás usando la sintaxis correcta, particularmente de la parte en negrita...
cat /proc/$(25211$)/oom_adj
Seguro que te has dado cuenta de que puedes usar tu explorador de archivos favorito y navegar por las carpetas del sistema hasta llegar a esa ruta ... /proc/25211/oom_adj
Lo de los arrays está en inglés y yo me llevo muy mal con ese idioma.
El recopilatorio está en español.
Releyendo el post de maid, en una de las intervenciones de Caravantes, he descubierto Si if %salida~%* . Será esto lo que ando buscando?
No es un mal invento, pero eso es lo mismo que usar la condición "No ajust.". ¿Es eso lo que pasa cuando pgrep no encuentra el PID de un paquete?. ¿La variable %pid se queda sin definir? ... misterio misterioso. :rolleyes:
WillyWeb
03/11/16, 17:38:29
Greenify (62)...
Esa es la idea, aunque tal y como la has planteado te sobran A6 y A7.
¿Has comprobado el contenido de %memo antes de usarlo?. Lo mismo te llevas una sorpresa. :silbando:
Nota: lo puedes comprobar igual que en A2.
Mitrhandir
03/11/16, 18:23:49
cat /proc/%pid/oom_adj me sale 9
cat /proc/(%pid)/oom_adj me sale 11
Sí, me he llevado una sorpresa :oh:
Pero sin embargo, ejecuto cat /proc/$(%pid$)/oom_adj me da error :loco:
A investigar...
Caravantes
03/11/16, 18:50:20
Lo de los arrays está en inglés y yo me llevo muy mal con ese idioma.
En este mismo foro, explicado en castellano:
Guía del principiante a Tasker. Lección 7: las matrices de variables.
http://www.htcmania.com/showthread.php?p=9409867
Mitrhandir
03/11/16, 18:51:59
Gracias Caravantes. Muy atento y amable por tu parte! :dios:
WillyWeb
03/11/16, 18:57:07
Sí, me he llevado una sorpresa :oh:
Ya. Y no veo ese 0 y ese 2 que "esperabas". :silbando:
Pero sin embargo, ejecuto cat /proc/$(%pid$)/oom_adj me da error :loco:
¿Cuántas veces te he preguntado si esa forma de escribir el comando te parecía correcta? :rolleyes:
Mitrhandir
03/11/16, 19:40:32
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.
Mitrhandir
03/11/16, 21:03:36
Esto es desesperante. Me arroja cualquier resultado menos el que ando buscando! Me sé de uno que estará disfrutando!
WillyWeb
03/11/16, 21:57:05
... 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.
Lo que Maid no ha dejado del todo claro en su tutorial es que esa forma de escribir un comando implica realmente la ejecución de dos comandos y la utilización de la salida de uno de ellos directamente en el otro.
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.
Esto es desesperante. Me arroja cualquier resultado menos el que ando buscando!
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.
Mitrhandir
04/11/16, 05:59:44
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!
WillyWeb
04/11/16, 10:48:43
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$
Mitrhandir
04/11/16, 11:21:51
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
WillyWeb
04/11/16, 13:20:59
... 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.
Pues haces mal porque me he colado :(
Lo correcto es esto... ps | grep com.UCMobile.intl
Ojo a esa barra vertical que importante.
Mitrhandir
04/11/16, 13:30:12
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:/ #
WillyWeb
04/11/16, 15:56:01
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:/ #
Lo que yo te decía. En este caso tienes tres procesos con un nombre de paquete que se cuela en el pgrep si no pones el signo $ por detrás.
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.
Mitrhandir
04/11/16, 17:50: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.
WillyWeb
04/11/16, 17:57:15
Hay alguna manera de entre el listado "filtrar" y dejar pasar sólo las que están en primer o segundo plano?
Justo para eso miras el contenido de "/proc/%pid/oom_adj" :rolleyes:
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.
Mitrhandir
04/11/16, 18:26:22
Sí pero cat /proc/%pid/oom_adj no me devuelve 0 ni 2 :loco:
De todas formas, pruebo a ver...
WillyWeb
04/11/16, 19:08:06
Pero si ya tienes todo lo que necesitas :loco:
¿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
Mitrhandir
04/11/16, 21:12:04
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!
WillyWeb
04/11/16, 21:32:26
Te falla si el valor es negativo. ¿Qué pasa si es -13, por ejemplo?
Y te sobra el último IF.
Mitrhandir
05/11/16, 05:36:35
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. :loco:
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.
Mitrhandir
05/11/16, 10:52:03
Este perfil me tiene muy ansiado! :risitas:
Sólo por curiosidad, he vuelto a instalar Greenify para ver su comportamiento y de paso tener una idea de cómo plantear o enfocar el perfil que nos ocupa.
Bien, cuando abres la app, en la pantalla principal sale "SIN HIBERNAR AUTOMÁTICAMENTE", más abajo "SE HIBERNARÁ DENTRO DE UNOS MINUTOS" y más abajo "EN HIBERNACIÓN".
Es decir, Greenify ya sabe que aplicaciones están paradas, por lo tanto ésas quedan a parte y se centra en las que están en primer o segundo plano. Luego si apagamos la pantalla, la app greenificará las apps que tú has predefinido (tanto de sistema como de usuario).
Entonces, lo que queremos es las apps que ya están detenidas, ignorarlas. Pudiera ser esto Si if %pid ~ con error (no sé cómo plasmarlo) -ignorar-.
Entonces, de esas apps restantes, entiendo que se pueden greenificar sin problemas, porque no detiene nada que no esté en esa lista.
Este planteamiento es sencillo, pero sin embargo, me está dando muchos dolores de cabeza.:loco:
WillyWeb
05/11/16, 11:15:53
Recuerda que la mayor parte de las veces programar es automatizar lo mismo que haces a mano.
A1 pgreg nombre-de-paquete para obtener el %pid de un paquete
A2 si %pid tiene valor (la aplicación está en memoria)
A3 cat /proc/%pid/oom_adj para obtener el %pidoom (estado de la aplicación)
A4 si %pidoom no es menor de 0 (será positivo y por lo tanto no será de sistema)
A5 si %pidoom !~ 0 y %pidoom !~ 2 (si el estado no es o ni 2)
A6 am force-stop %pid (para la aplicación)
A7 fin-si
A8 fin-si
A9 fin-si
Si %pidoom también puede estar sin valor (no debería pasar) también lo tendrás que tener en cuenta con el IF correspondiente.
Y lo de esos colores rojo/verde es perfectamente normal. Piensa un poco, ¿qué valor tiene %tu variable %pido en el instante en que Tasker está analizando esa condición?. Ojo, no te digo mientras se ejecuta la tarea, te digo justo en ese momento, con la tarea parada. :rolleyes:
Mitrhandir
05/11/16, 12:12:49
A ver, a ver...
Greenify (62)
A1: Ejecutar consola [ Comando:pgrep com.whatsapp ; pgrep com.UCMobile.intl$ ; pgrep jackpal.androidterm ; Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Si (if) [ %pid No ajust. ]
A3: Ejecutar consola [ Comando:cat /proc/%pid/oom_adj Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pido Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A4: Else Si (if) [ %pido > -17 & %pido < 17 & %pido !~ 0/2/1/360 ]
A5: Ejecutar consola [ Comando:am force-stop %pido Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En: Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A6: Fin si (End if)
Porqué pones tantos Fin si al final?
Antes de que digas nada, he hecho un "ps" y además de valores 0 y 2, me salen 1 y 360. Aunque el 1 lo acabo de quitar: es de sistema.
WillyWeb
05/11/16, 12:16:58
Porqué pones tantos Fin si al final?
Para tener tema de conversación :risitas:
Vamos a ver, si tienes tres IF lo normal es tener otros tres END-IF. No es un capricho, es que debes ponerlos.
Y sobre tu tarea. Pues muy bonita, pero se parece a lo que te he propuesto lo que un huevo a una castaña ... en lo redondo del culo. :oh:
Mitrhandir
05/11/16, 12:26:45
:risitas: Es que estoy hecho un lío! :risitas:
Apruebas (44)
A1: Ejecutar consola [ Comando:pgrep com.whatsapp ; pgrep com.UCMobile.intl$ ; pgrep jackpal.androidterm ; Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Pop-Up [ Título: Texto:%pid Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A3: Ejecutar consola [ Comando:cat /proc/%pid/oom_adj Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pido Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A4: Pop-Up [ Título: Texto:%pido Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):6 Mostrar sobre bloqueo pantalla:Encendido ]
A5: Si (if) [ %pido ~ 0/2/360/- & %pid No ajust. ]
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 ]
A7: Fin si (End if)
WillyWeb
05/11/16, 12:49:53
¿Vas a seguir dando vueltas a esas siete acciones mucho más rato? Ya te aviso que las permutaciones de siete elementos son más de 5000. ;-)
En la primera versión hacías cosas sin sentido...
A1 sacas el %pid de un paquete
A2 si %pid no tiene valor (justo cuando no tienes que hacer nada :rolleyes:)
A3 sacas el %pido del %pid
A4 pero si %pido es mayor de -17 y menor de 17 y distinto de 0, 2, 1 o 360 :oh:
A5 paras el %pido sacado en A3
A6 fin-si
Pero en esta tampoco es que hagas cosas mucho más acertadas...
A1 sacas el %pid de un paquete
A2 muestras el %pid
A3 sacas el %pido del %pid
A4 muestras el %pido
A5 Si %pido es 0, 2, 360 o - y %pid no tiene valor :oh:
A6 paras el %pid sacado en A1
A7 fin-si
Mitrhandir
05/11/16, 13:31:52
Lo sé Willy, y te pido disculpas. Pero estoy muy confundido, porque cuando pienso que la tarea está perfecta, me da error. Y es muy fustrante para un aprendiz como yo no evolucionar. Y mira que me has dado pistas! :risitas:
Mitrhandir
05/11/16, 13:37:25
Mira este a ver:
Greenify (62)
A1: Ejecutar consola [ Comando:pgrep com.whatsapp ; pgrep com.UCMobile.intl$ ; Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Ejecutar consola [ Comando:cat /proc/%pid/oom_adj Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pido Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A3: Si (if) [ %pid No ajust. ]
A4: Si (if) [ %pido !~ 0/2/360 ]
A5: Si (if) [ %pido > -17 & %pido < 17 ]
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 ]
A7: Fin si (End if)
A8: Fin si (End if)
A9: Fin si (End if)
Creo que es lo que tú me decías.
WillyWeb
05/11/16, 13:37:34
No es tan complicado. ¿Entiendes la secuencia de acciones que te he puesto en el post #62?. ¿Te parece lógica?. Pues simplemente tienes que transcribir, acción por acción, en un atarea.
WillyWeb
05/11/16, 13:39:45
Mira este a ver:
Eso no es lo mismo que pone en el post #62.
Mitrhandir
05/11/16, 13:39:49
Lo entiendo todo y tiene sentido, pero cuando una aplicación está ya parada, me da error y ya no sé si la tarea se ejecuta o no.
WillyWeb
05/11/16, 13:42:12
Lo entiendo todo y tiene sentido, pero cuando una aplicación está ya parada, me da error y ya no sé si la tarea se ejecuta o no.
¿Con la tarea del post #62? :oh:
Mitrhandir
05/11/16, 15:02:16
Vamos a ver :
A1 pgreg nombre-de-paquete para obtener el %pid de un paquete
A1 Comando consola pgrep (package name) almacenar resultado en %pid
A2 si %pid tiene valor (la aplicación está en memoria)
A2 Si if %pid ~ ¿? (No tengo muy claro qué poner aquí)
A3 cat /proc/%pid/oom_adj para obtener el %pidoom (estado de la aplicación)
A3 comando cat /proc/%pid/oom_adj
Almacenar resultado en %pidoom
A4 si %pidoom no es menor de 0 (será positivo y por lo tanto no será de sistema)
A4 Si if %pidoom < 0
A5 si %pidoom !~ 0 y %pidoom !~ 2 (si el estado no es o ni 2)
A5 Si if %pidoom !~ 0/2
A6 am force-stop %pid (para la aplicación)
A6 am force-stop (package name)
A7 fin-si A8 fin-si A9 fin-si
Ahora lo trasladaré a Tasker.
WillyWeb
05/11/16, 16:15:32
A1 pgreg nombre-de-paquete para obtener el %pid de un paquete
A1 Comando consola pgrep (package name) almacenar resultado en %pid
Vale.
A2 si %pid tiene valor (la aplicación está en memoria)
A2 Si if %pid ~ ¿? (No tengo muy claro qué poner aquí)
Pues si "no tiene valor" es "No está ajustado" entonces "tiene valor" será ... "Ajustado". Ya, el nombre de las opciones de Tasker no es precisamente intuitivo, pero sólo tienes dos opciones posibles.
A3 cat /proc/%pid/oom_adj para obtener el %pidoom (estado de la aplicación)
A3 comando cat /proc/%pid/oom_adj almacenar resultado en %pidoom
Vale.
A4 si %pidoom no es menor de 0 (será positivo y por lo tanto no será de sistema)
A4 Si if %pidoom < 0
¿Dónde ves tú que eso sea lo mismo que te he dicho?. Yo te pongo "si no es menos que 0" y tú pones "si es menor que 0".
A5 si %pidoom !~ 0 y %pidoom !~ 2 (si el estado no es 0 ni 2)
A5 Si if %pidoom !~ 0/2
Edito, que esto se me ha pasado antes. :rolleyes:
Ojo que yo te he puesto "%pidoom !~ 0 y %pidoom !~ 2" y lo que tú has puesto es "%pidoom !~ 0 o %pidoom !~ 2".
A6 am force-stop %pid (para la aplicación)
A6 am force-stop (package name)
No es el "package name", es el %pid lo que tienes que usar.
A7 fin-si A8 fin-si A9 fin-si
Ahora lo trasladaré a Tasker.
¿Pero es que todavía no lo has hecho? :oh:
Mitrhandir
05/11/16, 16:23:09
Porque me he levantado a las 3:30 de la mañana y necesitaba cerrar los ojos un ratito por el bien de mis neuronas. Voy a ello.
Mitrhandir
05/11/16, 16:38:12
Greenify (62)
A1: Ejecutar consola [ Comando:pgrep com.oasisfeng.greenify ;pgrep com.vito.lux ;pgrep com.joeykrim.rootcheckp ;pgrep com.whatsapp ;pgrep com.buak.Link2SD Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Si (if) [ %pid No ajust. ]
A3: Ejecutar consola [ Comando:cat /proc/%pid/oom_adj Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pidoom Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A4: Si (if) [ %pidoom !~ 0 & %pidoom !~ 2 ]
A5: Si (if) [ %pidoom > 0 ]
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 ]
A7: Fin si (End if)
A8: Fin si (End if)
A9: Fin si (End if)
Aquí está.
A1me da error. Este:
16.36.49/E Ejecutar consola: %pid -> %pid
16.36.49/E Ejecutar consola: ->
16.36.49/E Ejecutar consola: ->
16.36.49/Shell runBackground pgrep com.oasisfeng.greenify ;pgrep com.vito.lux ;pgrep com.joeykrim.rootcheckp ;pgrep com.whatsapp ;pgrep com.buak.Link2SD root: true timeout: -1
16.36.49/Shell start process-thread ID 33076
16.36.49/E add wait type Shell1 time 2147483647
16.36.49/E add wait type Shell1 done
Y esta es la captura:
WillyWeb
05/11/16, 18:55:25
A1 me da error.
¿Sólo en A1? :oh:
Pues llámame loco, pero lo mismo es por NO SEGUIR EXACTAMENTE mis sugerencias. :silbando:
Insistes en poner varios paquetes en A1, y no sabes cómo procesar el resultado de eso.
La condición de A2 sigue siendo la contraria a la que te había dicho.
Las condiciones de A4 y A5 están cambiadas de orden, y la condición de A5 no es lo mismo que "no es menor que 0".
Aunque no todo son malas noticias. Este último error me ha permitido ver que te podrías ahorrar un IF y su correspondiente END-IF fundiendo A4 y A5 así ...
Si (if) [ %pidoom > 0 & %pidoom !~ 2 ]
Estoy ansioso por ver qué nueva interpretación haces ahora. ;-)
Mitrhandir
05/11/16, 19:01:05
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 ]
A2: Si (if) [ %pid Ajuste ]
A3: Ejecutar consola [ Comando:cat /proc/%pid/oom_adj Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pidoom Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A4: Si (if) [ %pidoom > 0 & %pidoom !~ 2 ]
A5: 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: Fin si (End if)
A7: Fin si (End if)
Ves? Me fallan las neuronas! :risitas:
WillyWeb
05/11/16, 19:03:32
:platano:
Y sólo han sido necesarios 78 post para una tarea de 7 acciones ... a 11 post por acción. :ok:
Mitrhandir
05/11/16, 19:47:49
:risitas::risitas::risitas::risitas: La verdad es que echaba esto de menos. Y te estás ganando el cielo conmigo.
Bueno, ahora vamos al siguiente punto:
Cómo hacer cuando es más de un package name? Este perfil sólo para los procesos de usuario no?
Muchas gracias a todos los que habéis participafo. Tenéis toda mi admiración! :aplausos::dios:
WillyWeb
05/11/16, 21:16:36
Cómo hacer cuando es más de un package name?
Pues se puede hacer de varias formas, pero creo que la más sencilla sería algo así...
- Creas una lista con los paquetes que quieres "parar".
- Conviertes esa lista en un array.
- Recorres ese array de elemento en elemento.
- A cada elemento le aplicas el proceso que ya tienes creado.
- Y vuelta al principio hasta terminar con la lista.
Debería estar resuelto con cuatro acciones más, es decir, nos queda entre 40 y 50 post para terminar con este asunto. :oh:
Este perfil sólo para los procesos de usuario no?
Tal y como está, sí.
Mitrhandir
05/11/16, 21:43:42
Y el listado sólo ha de tener los packages names separados por un punto y coma?
Yo de arrays sé 0, pero voy a intentarlo. Voy a hacer un empaste, lo sé, pero el mundo pertenece a los valientes!
WillyWeb
05/11/16, 21:45:55
Y el listado sólo ha de tener los packages names separados por un punto y coma?
Sí, sólo los nombres de paquete, y puedes usar el separador que más te guste, pero debería ser "algo" que nunca aparezca en el nombre de un paquete. El punto y coma puede valer.
Mitrhandir
05/11/16, 21:52:36
Vale, estoy leyendo lo de los arrays. Madre mía, esto va a ser divertido! :risitas:
Mitrhandir
06/11/16, 00:38:12
Buff, esto de los arrays lo veo complicado.
Por lo que leo %pid sería la matriz. Entonces si separamos variable, obtendríamos %pid1, %pid2, etc...
Habría que utilizar %pid() para utilizar todos los packages names que están separados por un punto y coma. Aunque en esto tengo mis dudas.
Un array numera listas de variables. ¿No?
Vamos poco a poco. Yo, como si tuviera 4 años. Vamos, Tasker para dummies! :oh: :loco:
WillyWeb
06/11/16, 01:11:12
Ya estamos con las escusas ... :rolleyes:
Para la lista un "Establecer variable"...
¿Qué nombre? ...%lista
¿Qué valor? ... com.oasisfeng.greenify;com.vito.lux;com.joeykrim.r ootcheckp;com.whatsapp;com.buak.Link2SD (añade todo lo que quieras)
Para crear el array a partir de esa lista un "Separar variable"...
¿Qué variable? ... %lista
¿Qué separador? ... ;
Para recorrer cada elemento del array un "For"...
¿Qué variable? ... %pak
¿Qué Ítems? ... %lista()
Esas tres acciones van por delante de la tarea que ya tienes terminada. Una vez que tengas eso simplemente tienes que poner %pak$ donde antes ponías el nombre del paquete. Antes era A1 y ahora debe ser A4. Y ojo al $ para evitar PIDs múltiples, que antes no lo has puesto.
Y al final del todo cierras el FOR con su correspondiente END FOR y a correr ... cuatro acciones.
Mitrhandir
06/11/16, 08:52:21
Lo he seguido al pie de la letra, pero no veo que funcione. Whatsapp y navegador siguen en segundo plano. A4 da error y no sale el punto verde, si no rojo.
Greenify (62)
A1: Establecer variable [ Nombre:%lista A:com.vito.lux;com.joeykrim.rootcheckp;com.whatsap p;com.buak.Link2SD;com.huawei.systemmanager;com.so cialnmobile.dictapps.notepad.color.note;com.UCMobi le.intl;org.telegram.plus;jackpal.androidterm;eu.t hedarken.sdm;com.shinycore.picsaypro;the.pdfviewer 3;com.alensw.PicFolder;com.yoigo.miyoigo;com.flavi onet.android.camera.pro;com.android.bluetooth;com. android.calculator2;com.android.settings;com.huawe i.camera;com.huawei.android.launcher;com.android.m ediacenter;com.android.providers.calendar;com.huaw ei.bluetooth;com.huawei.android.thememanager;com.h uawei.motionservice;com.huawei.magnifier;com.huawe i.android.FMRadio;com.android.soundrecorder;com.hu awei.KoBackup;com.android.defcontainer;com.android .vending;com.huawei.hwvplayer;com.android.contacts ;com.android.nfc;com.google.android.gm;com.android .calendar;com.estrongs.android.pop;com.android.cel lbroadcastreceiver;com.google.android.gms;com.sika 524.android.quickshortcut;com.huawei.android.hwouc ;com.huawei.android.wfdft;org.blackmart.market;com .android.systemui;com.qualcomm.timeservice;com.hua wei.autoinstallapkfrommcc;com.huawei.autoinstallap kfrommcc;org.simalliance.openmobileapi.service;com .android.documentsui;com.huawei.DiagReboot;com.and roid.smspush; Calcular:Apagado Añadir:Apagado ]
A2: Separar variable [ Nombre:%lista Separador:; Eliminar base:Apagado ]
A3: For [ Variable:%pak Ítems:%lista() ]
A4: Ejecutar consola [ Comando:%pak$ Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A5: Si (if) [ %pid Ajuste ]
A6: Ejecutar consola [ Comando:cat /proc/%pid/oom_adj Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pidoom Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A7: Si (if) [ %pidoom > 0 & %pidoom !~ 2 ]
A8: 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 ]
A9: Fin si (End if)
A10: Fin si (End if)
A11: End For
Creo que faltaría poner un Si if %pidoom < 0 para las apps de sistema. He un comando ps y veo que a parte de 0/2 también hay 360 para unas apps de sistema que están en el listado.
Pero estoy emocionado!
WillyWeb
06/11/16, 09:47:38
Lo he seguido al pie de la letra, pero no veo que funcione. Whatsapp y navegador siguen en segundo plano. A4 da error y no sale el punto verde, si no rojo.
A4: Ejecutar consola [ Comando:%pak$ Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%pid Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A7: Si (if) [ %pidoom > 0 & %pidoom !~ 2 ]
Creo que faltaría poner un Si if %pidoom < 0 para las apps de sistema. He un comando ps y veo que a parte de 0/2 también hay 360 para unas apps de sistema que están en el listado.
Claro que A4 te da error ... te falta el comando pgrep :oh:
Y tal como está escrita la condición de A7 ya están filtrador los valores de estado para los procesos de sistema (-1 hasta -17, según la documentación). Esa condición sólo deja pasar las aplicaciones con valores mayores de 0 (que no estén en primer plano) y que no sea 2 (que no estén en segundo plano). Ese 360 es nuevo. :oh:
WillyWeb
06/11/16, 12:06:36
He un comando ps y veo que a parte de 0/2 también hay 360 para unas apps de sistema que están en el listado.
Un momento. El comando "ps" no muestra el valor de OOM. ¿Dónde estás viendo ese 360? :oh:
Mitrhandir
06/11/16, 14:27:02
Nada olvídalo. Ha sido una ralladura mía. Ahora parece que sí, pero las apps que tienen más de un PID sólo cierra un proceso, pero los demás no.
En el caso de com.UCMobile.intl, se quedan 2 procesos abiertos. Pero no sé averiguar qué procesos son para añadirlos a %list.
He probado ps com.UCMobile.intl (no sale nada) y pgrep com.UCMobile.intl, pero sólo me salen 3 pid's.
Cómo lo hago?
WillyWeb
06/11/16, 14:41:47
He probado ps com.UCMobile.intl (no sale nada)...
Lo estás haciendo mal. Y lo habías hecho bien en el post #52 ...
ps | grep com.UCMobile.intl
Cómo lo hago?
Usando el comando anterior saca el nombre de los procesos que quieres parar y los añades a la %lista de la primera acción.
Mitrhandir
06/11/16, 16:35:39
El perfil está casi acabado. Estoy contento porque espero que mucha gente utilice este perfil y que les sea útil.
Este navegador me da a dar por saco:
16.31.44/Variables doreplresult: |pgrep %pak$| -> |pgrep com.UCMobile.intl$:RemoteBackgroundService$|
16.31.44/Variables doreplresult: |pgrep %pak$| -> |pgrep com.UCMobile.intl$:RemoteBackgroundService$|
16.31.44/E Ejecutar consola: %pid -> %pid
16.31.44/E Ejecutar consola: ->
16.31.44/E Ejecutar consola: ->
16.31.44/Shell runBackground pgrep com.UCMobile.intl$:RemoteBackgroundService$ root: true timeout: -1
16.31.44/Shell start process-thread ID 39356
16.31.44/E add wait type Shell16 time 2147483647
16.31.44/E add wait type Shell16 done
Qué puedo hacer?
WillyWeb
06/11/16, 16:57:05
No inventes. Sigue las instrucciones del post #91.
Mitrhandir
06/11/16, 17:04:08
Sí, me había equivocado al transcribir el package name. El ppid es el estado de ejecución (primer plano, segundo, etc...) ?
Ahora me da el mismo error, pero con com.android.smspush...
WillyWeb
06/11/16, 17:20:16
Sí, me había equivocado al transcribir el package name.
:oh:
El ppid es el estado de ejecución (primer plano, segundo, etc...) ?
No. El PPID es el número del proceso "padre" de ese proceso.
Ahora me da el mismo error, pero con com.android.smspush...
El procedimiento para evitar eso siempre es el mismo... presta mucha atención al escribir el nombre del proceso que quieres parar.
Mitrhandir
07/11/16, 11:27:04
Bueno, doy por finalizado este hilo. Quiero dar gracias a todos los que han participado en este hilo.
Hacemos otro reto? :risitas:
http://www.htcmania.com/archive/index.php/t-1242947.html
Un abrazo foreros!
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.