我有一台运行Jelly Bean操作系统的Android设备。
如果我知道软件包名称,是否有使用ADB
命令检测进程是否正在运行的方法?
ps
可以通过COMM
值进行过滤(对于Java应用程序而言,它是包名称的最后15个字符)。com.android.phone
是否正在运行: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
在Android 7.0中,过滤ps
中COMM
值选项已移除。要检查Android 7.0中运行的进程名称,可以使用pidof
命令:
adb shell pidof com.android.phone
您可以使用
adb shell ps | grep apps | awk '{print $9}'
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命令返回Android设备上所有正在运行的进程列表,grep apps命令搜索包含“apps”的任何行,如上所示它们都是com.google.android.APPS或GAPPS,awk提取第9列,即此情况下的包名。
要搜索特定的包,请使用:
adb shell ps | grep PACKAGE.NAME.HERE | awk '{print $9}'
即,运行 adb shell ps | grep com.we7.player | awk '{print $9}'
命令,如果应用正在运行,则会显示名称;否则,不会返回任何结果。
read
。只需使用tr -s ' '
来删除连续的空格,就像这样:adb shel "ps | tr -s ' ' | cut -d' ' -f9 | grep '^com.google.android.gms$'"
。 - Alex P.adb shell "dumpsys activity activities | grep mResumedActivity | cut -d "{" -f2 | cut -d ' ' -f3 | cut -d "/" -f1"
使用cut命令删除adb命令结果中的额外信息。原始解决方案来自这里。
mFocusedApp
对我不起作用 - dumpsys
的输出根本没有包含任何mFocusedApp
的出现。相反,我成功地使用了mObscuringWindow
,它似乎以同样的方式工作! - Luke Needhamadb shell dumpsys window windows | grep -E 'mObscuringWindow'| cut -d / -f 1 | cut -d " " -f5
。然而,在我的Android 11 Pixel上,这个命令似乎不起作用。在Android 7 Motorola上也不起作用。只有在Android 12 OnePlus上才能正常工作。但是,我发布的新解决方案适用于所有设备。 - vepzfe我刚刚注意到在adb中可以使用top,因此您可以执行以下操作:
Translated:
我刚刚注意到在adb中可以使用top,因此您可以执行类似的操作。
adb shell
top -m 5
监控消耗前五高CPU的进程。
或者
adb shell top -m 5 -s cpu -n 20 |tee top.log
将其录制一分钟,并将输出收集到计算机文件中。
尝试:
adb shell pidof <myPackageName>
如果应用程序没有运行,标准输出将为空。否则,它会输出PID。
或者,您可以选择使用pgrep
或进程grep。(需要Busybox)
您可以执行adb shell pgrep com.example.app
,它将仅显示进程ID。
作为建议,由于Android是Linux,因此您可以使用大多数基本的Linux命令来通过adb shell
进行导航/控制。 :D
pidof
的一个注意事项:有时候当我执行readlink /proc/$PID/exe
时,会得到“已删除”的进程。 - jozxyqk