如何获取Android系统的所有正在运行的流程列表,包括系统启动流程?
我尝试使用以下代码获取列表:
ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
这为我提供了com.android.phone
,com.android.chrome
等流程列表。
但是当我在ps
中运行adb shell
命令时,我可以看到其他一堆进程正在运行。我附上了在我的系统中运行的所有进程的屏幕截图。
有人可以看到,有几个Android系统的流程也在运行,如/system/bin/vold
和/system/bin/installed
等。
但getRunningAppProcesses()
API未报告这些内容。在其文档中,它表示此API:
返回设备上运行的应用程序进程列表。
这是否意味着它不会返回&#34;系统流程&#34;?如果是这种情况,开发人员可以选择迭代什么选项&#34; ALL&#34;在Android上运行的进程?
- 我还尝试了什么:
尝试使用ActivityManager
中的另外两个API:
getRecentTasks(int maxNum)
及其变体。但Android文档警告其使用如下:
此方法在API级别21中已弃用。
自LOLLIPOP起,此方法不再适用于第三方应用
getRunningServices(int maxNum)
但这两个都不能给我/system/bin/debuggerd
等名称
注意:我在非Root设备上运行Android-4.2 Jellybean。
答案 0 :(得分:6)
通过从ActivityManager
调用API,您只能获取向其注册的应用程序 - 即UI活动 - 而不是所有进程。您看到的使用非反向DNS名称,但路径(例如/system/bin/*
)是原生守护进程,由init
启动,并且不在ActivityManager
。
解决此问题的一种方法是直接从/proc
获取流程列表(就像工具箱&#39; s ps
一样)。这需要以编程方式在那里的目录上进行迭代(即/proc/[0-9]*
),并修剪内核线程。内核线程是那些PPID
为2的线程,所以它们很容易。原生守护进程的PPID
为1.应用程序将有PPID
Zygote。