57

我有一台运行 Jelly Bean OS 的 Android 设备。

ADB如果我知道包名称,有什么方法可以检测进程是否正在运行?

4

6 回答 6

82

无需使用 grep。ps在 Android 中可以按值过滤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 中删除了按值过滤COMM选项。要在 Android 7.0 中按名称检查正在运行的进程,您可以使用命令:pspidof

adb shell pidof com.android.phone

如果找到此类进程,则返回 PID,否则返回空字符串。

于 2013-05-22T17:29:14.033 回答
33

您可以使用

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}'

IEadb shell ps | grep com.we7.player | awk '{print $9}'

如果它正在运行,则会出现名称,否则不会返回任何结果。

于 2013-05-22T12:22:15.697 回答
24

如果你想直接获取当前应用的包名,使用这个 adb 命令 -

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

使用 cut 命令删除来自 adb 命令结果的额外信息。来自这里的原始解决方案。

于 2017-02-16T11:03:07.020 回答
16

我刚刚注意到topadb中可用,因此您可以执行以下操作

  adb shell
  top -m 5

监控前五个 CPU 占用进程。

或者

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

记录一分钟并将输出收集到计算机上的文件中。

于 2015-04-16T16:48:46.733 回答
7

尝试:

adb shell pidof <myPackageName>

如果应用程序未运行,标准输出将为空。否则,它将输出 PID。

于 2017-10-10T13:52:21.550 回答
3

或者,您可以使用pgrep或处理 Grep。(需要忙箱)

你可以做一个adb shell pgrep com.example.app,它只会显示进程ID。

作为建议,由于 Android 是 Linux,您可以使用大多数基本的 Linux 命令adb shell来导航/控制。:D

于 2013-05-23T08:09:45.667 回答