2013-05-22 12 views
35

Ho un dispositivo Android con sistema operativo Jelly Bean.Come rilevare l'applicazione in esecuzione usando il comando ADB

C'è un modo per rilevare il processo è in esecuzione o non utilizzare il comando ADB se so il nome del pacchetto ?

+0

Possibile duplicato di [Trova l'ID del processo in esecuzione in base al nome del pacchetto] (http://stackoverflow.com/questions/15608876/find-out-the-running-process-id-by-package-name) –

risposta

51

Non è necessario utilizzare grep. ps in Android può filtrare per COMM valore (ultimi 15 caratteri del nome del pacchetto in caso di java app)

Diciamo che vogliamo controllare se com.android.phone è in esecuzione:

adb shell ps m.android.phone 
USER  PID PPID VSIZE RSS  WCHAN PC   NAME 
radio  1389 277 515960 33964 ffffffff 4024c270 S com.android.phone 

Filtraggio per COMM value option has been removed da ps in Android 7.0. Per verificare la presenza di un processo in esecuzione in base al nome in Android 7.0 è possibile utilizzare pidof comando:

adb shell pidof com.android.phone 

Esso restituisce il PID, se è stato trovato tale processo o una stringa vuota altrimenti.

+3

Nota che questo non funzionerà se gli ultimi 15 caratteri del nome di un pacchetto iniziano con un numero. (Esempio: com.number13.example.debug, dove gli ultimi 15 caratteri sono "3.example.debug"). Motivo? Il comando filtra per pid invece del nome del processo se il primo carattere è una cifra: https://github.com/android/platform_system_core/blob/master/toolbox/ps.c#L295 –

+0

Una nota per 'pidof': I ' m a volte ricevendo processi "cancellati" quando ho 'readlink/proc/$ PID/exe'. – jozxyqk

+0

Ottimo! Grazie! ha funzionato su Android 7.0 (Galaxy S8 +) e 8.0 (emulatore) – hungtdo

27

È possibile utilizzare

adb shell ps | grep apps | awk '{print $9}' 

per produrre un output come:

com.google.process.gapps 
com.google.android.apps.uploader 
com.google.android.apps.plus 
com.google.android.apps.maps 
com.google.android.apps.maps:GoogleLocationService 
com.google.android.apps.maps:FriendService 
com.google.android.apps.maps:LocationFriendService 

adb shell ps restituisce un elenco di tutti i processi in esecuzione sul dispositivo Android, grep applicazioni ricerca per ogni fila con contiene "app", come puoi vedere sopra sono tutte com.google.android.APPS. o GAPPS, awk estrae la nona colonna che in questo caso è il nome del pacchetto.

Per cercare un particolare pacchetto usare

adb shell ps | grep PACKAGE.NAME.HERE | awk '{print $9}' 

cioè adb shell ps | grep com.we7.player | awk '{print $9}'

Se è in esecuzione verrà visualizzato il nome, se non ci sarà alcun risultato restituito.

+0

Grazie per la risposta, voglio solo la lista dei processi come mostra gli strumenti DDMS sotto il dispositivo in Eclipse. –

+0

quindi dovrei eseguire i processi di attività di dumpys della shell adb | app di grep | awk '{print $ 9}' ??? –

+0

No, scusate, ho cambiato la mia risposta, utilizzare ciò che è mostrato sopra, adb shell ps | app di grep | awk '{print $ 9}' – o0rebelious0o

3

In alternativa, è possibile utilizzare pgrep o Process Grep. (È necessario Busybox)

Si potrebbe fare un adb shell pgrep com.example.app e verrà visualizzato solo l'ID di processo.

Come suggerimento, dal momento che Android è Linux, è possibile utilizzare la maggior parte dei comandi di base di Linux con adb shell per navigare/controllare. : D

+0

Grazie per la risposta..ma dà errore sul mio dispositivo dicendo,/system/bin/sh: pgrep: non trovato –

+3

Android non supporta grep – Ryan

+2

@Rinkalkumar è necessario installare busybox – kevin

2

Ho appena notato che superiore è disponibile in adb, in modo da poter fare le cose come

adb shell 
    top -m5 

di monitorare i primi cinque processi CPU monopolizzavano.

O

adb shell top -m5 -s cpu -n 20|tee top.log 

per registrare questo per un minuto e raccogliere l'output in un file sul computer.

+0

apprezzo la tua risposta , ma questo non è quello che stavo cercando !! –

4

Se si desidera ottenere direttamente il nome del pacchetto dell'app corrente a fuoco, utilizzare questo comando adb -

adb shell dumpsys window windows | grep -E 'mFocusedApp'| cut -d/-f 1 | cut -d " " -f 7 

Ulteriori informazioni dal risultato del comando adb viene rimosso utilizzando il comando di taglio. Soluzione originale da here.

+0

Amo questo, anche se ho dovuto usare -f 6 Produce sempre la stessa uscita? –

+0

@ArnaldoCapo Per me non funziona con -f 6. Senza comando di taglio, questo è l'output completo che ottengo: mFocusedApp = AppWindowToken {eb42ebb token = Token {f96bf4a ActivityRecord {d040cb5 u0 com.package/.MainNavBarActivity t8679}}} Quindi, -f 6 produce "u0". non ho controllato, ma spero che produca lo stesso output in modo coerente tra i dispositivi e le versioni di Android. Potresti incollare l'intero output senza tagliare? – abhiank

0

Prova:

adb shell pidof <myPackageName> 

output standard sarà vuota se l'applicazione non è in esecuzione. Altrimenti, emetterà il PID.

Problemi correlati