Список всех запущенных процессов в Android

Как получить список системы Android Все запущенные процессы, включая запущенные системы?

Я попытался получить список, используя следующий код:

ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();

Это дало мне список процессов, таких как com.android.phone, com.android.chrome и т.д.

Но когда я запускаю команду ps в моем adb shell, я мог видеть, как работает все остальные процессы. Я прилагаю скриншот всех тех процессов, которые выполняются в моей системе. Running processes in my devices

Как видно, существует несколько процессов Android System, таких как /system/bin/vold и /system/bin/installed и т.д.

Однако они не сообщаются API getRunningAppProcesses(). В своих документах говорится, что этот API:

Возвращает список процессов приложений, запущенных на устройстве.

Означает ли это, что он не вернет "системный процесс"? И если это так, то какой вариант разработчику может потребоваться для повторения процесса "ВСЕ", запущенного на Android?

- Что еще я пробовал: Пробовал еще 2 API от ActivityManager:

  • getRecentTasks(int maxNum) и его вариант.

Но Android-документы предупреждают о его использовании, как показано ниже:

Этот метод устарел на уровне API 21.

По сравнению с LOLLIPOP этот метод больше не доступен для сторонних приложений

  1. getRunningServices(int maxNum)

Но оба они не могли назвать мне имена, такие как /system/bin/debuggerd и т.д.

ПРИМЕЧАНИЕ. Я запускаю Android-4.2 Jellybean на некорневом устройстве.

Ответы

Ответ 1

Вызывая API из ActivityManager, вы получаете только зарегистрированные приложения, т.е. действия пользовательского интерфейса, а не все процессы. Те, которые вы видите с не обратным DNS-именем, но путь (например, /system/bin/*) являются родными демонами, начинаются с init и выходят из ActivityManager.

Один из способов - получить список процессов непосредственно из /proc (как это делает toolbox ps). Для этого требуется программный перебор по каталогам там (т.е. /proc/[0-9]*) и обрезка потоков ядра. Нити ядра - это те, у которых PPID 2, поэтому они легки. У родных демонов будет PPID из 1. Приложения будут иметь PPID Zygote.

Ссылка: NewAndroidBook.com