找出通过包名正在运行的进程ID(Find out the running process ID by

2019-07-23 03:59发布

我的工作中,我需要提供我的应用程序的PID的脚本。 我可以用下面的命令列出所有与它们的PID的过程,可以看到我的应用程序的入口。

亚行外壳PS

这给了我一个巨大的进程列表。 我需要一个单一的入口(我可以进一步提供给另一个命令),所以我想筛选此结果与包名。 grep命令并不在我的Windows机器上工作。 也尝试下面的命令,但它并没有帮助。

亚行外壳PS名称:my_app_package

Answer 1:

由于Android 7.0找出通过包名的进程ID的最简单的方法是使用pidof命令:

usage: pidof [-s] [-o omitpid[,omitpid...]] [NAME]...

Print the PIDs of all processes with the given names.

-s      single shot, only return one pid.
-o      omit PID(s)

就像这样运行它:

adb shell pidof my.app.package

在Android中7.0人使用之前ps的命令,然后使用解析它的输出是内置的由滤波器comm值(其为机器人应用是包名称的最后15个字符)或grep命令。 该comm如果名称的最后15个字符开始以数字和过滤器不工作grep是不包括在默认情况下,直到Android 4.2版本。 但是适当的工艺路线,发现即使在PID仍然需要价值被提取。

有多种方法可以做到这一点。 下面是如何找到处理,并且提取PID值可以使用单来完成sed命令:

adb shell "ps | sed -n 's/^[^ ]* *\([0-9]*\).* my\.app\.package$/\1/p'"

同样的问题是, sed在未包括在默认情况下,直到在Android 6.0。

但是如果你必须使用旧设备,你可以随时使用下面的Android版本独立的解决方案。 它不使用任何外部命令 - 让Android shell内置:

adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = my.app.package ]] && echo ${p##*/}; done"

最流行的原因,寻找一个PID是在像其他一些命令来使用它kill 。 比方说,我们有多个实例logcat运行,我们要优雅地一次完成他们所有。 只需更换echokill -2在最后的命令:

adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = logcat ]] && kill -2 ${p##*/}; done"

替换"'如果运行在Linux / OSX外壳的命令。



Answer 2:

而不是使用的adb shell ps ,先进入adb shell ,然后用ps

一步步:

  1. 输入adb shell命令而的装置(或仿真器)连接。
    (命令行前缀将shell@android:/ $ 。执行此命令后)

  2. 进入ps | grep <package_name_to_be_filtered> ps | grep <package_name_to_be_filtered>ps | grep com.google )。


C:> adb shell
shell@android:/ $ ps | grep com.google
u0_a64  3353  2467  903744 52904 ffffffff 00000000 S com.google.process.location
u0_a64  3426  2467  893964 49452 ffffffff 00000000 S com.google.process.gapps


Answer 3:

通过PS所示的过程可被限制到那些通过管道通过grep的输出,即用于搜索文本的滤波器属于任何给定的用户。 例如,属于用户以用户名亚当过程可以用下面显示:

ps -ef | grep adam

-e选项生成的有关当前运行的每个进程的信息列表。 -f选项生成包含的信息较少的项目比-l选项每个进程的列表。



文章来源: Find out the running process ID by package name
标签: android adb