Comment obtenir la liste des processus Android Tous les processus en cours du système, y compris les processus lancés par le système?
J'ai essayé d'obtenir la liste en utilisant le code ci-dessous:
ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
Cela m'a donné la liste des processus tels que com.Android.phone
, com.Android.chrome
, Etc.
Mais lorsque j'exécute une commande ps
dans mon adb Shell
, Je peux voir tout un tas de processus en cours d'exécution. Je joins la capture d'écran de tous ces processus en cours d'exécution sur mon système.
Comme on peut le voir, il existe plusieurs Android Les processus du système fonctionnent également comme /system/bin/vold
Et /system/bin/installed
, Etc.
Cependant, ceux-ci ne sont pas signalés par getRunningAppProcesses()
API. Dans ses documents, il indique que cette API:
Renvoie une liste des processus d'application qui s'exécutent sur le périphérique.
Cela signifie-t-il qu'il ne renverra pas le "processus système"? Et si tel est le cas, quelle option le développeur peut-il avoir à parcourir le processus "TOUS" fonctionnant sur Android?
- Quoi d'autre j'ai essayé: J'ai essayé avec 2 autres API de ActivityManager
:
getRecentTasks(int maxNum)
et sa variante.Mais Android docs met en garde contre son utilisation comme ci-dessous:
Cette méthode est déconseillée au niveau 21 de l'API.
Depuis Lollipop, cette méthode n'est plus disponible pour les applications tierces
getRunningServices(int maxNum)
Mais ces deux-là ne pouvaient pas me donner de noms comme /system/bin/debuggerd
, Etc.
REMARQUE: j'utilise Jellybean Android-4.2 sur un appareil non rooté.
En appelant une API à partir de ActivityManager
, vous obtenez uniquement les applications qui s'y sont inscrites - c'est-à-dire les activités de l'interface utilisateur - et pas toutes les processus. Ceux que vous voyez avec un nom DNS non inversé, mais un chemin d'accès (par exemple /system/bin/*
) sont des démons natifs, démarrés par init
et exclus du ActivityManager
.
Une solution consiste à obtenir la liste des processus directement à partir de /proc
(comme le fait la boîte à outils ps
). Cela nécessite une itération par programme sur les répertoires, (par exemple /proc/[0-9]*
), et l'élagage des threads du noyau. Les threads du noyau sont ceux avec un PPID
de 2, ils sont donc faciles. Les démons natifs auront un PPID
de 1. Les applications auront un PPID
de Zygote.
Référence: NewAndroidBook.com