我的工作中,我需要提供我的应用程序的PID的脚本。 我可以用下面的命令列出所有与它们的PID的过程,可以看到我的应用程序的入口。
亚行外壳PS
这给了我一个巨大的进程列表。 我需要一个单一的入口(我可以进一步提供给另一个命令),所以我想筛选此结果与包名。 grep命令并不在我的Windows机器上工作。 也尝试下面的命令,但它并没有帮助。
亚行外壳PS名称:my_app_package
我的工作中,我需要提供我的应用程序的PID的脚本。 我可以用下面的命令列出所有与它们的PID的过程,可以看到我的应用程序的入口。
亚行外壳PS
这给了我一个巨大的进程列表。 我需要一个单一的入口(我可以进一步提供给另一个命令),所以我想筛选此结果与包名。 grep命令并不在我的Windows机器上工作。 也尝试下面的命令,但它并没有帮助。
亚行外壳PS名称:my_app_package
由于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
运行,我们要优雅地一次完成他们所有。 只需更换echo
与kill -2
在最后的命令:
adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = logcat ]] && kill -2 ${p##*/}; done"
替换"
与'
如果运行在Linux / OSX外壳的命令。
而不是使用的adb shell ps
,先进入adb shell
,然后用ps
。
一步步:
输入adb shell
命令而的装置(或仿真器)连接。
(命令行前缀将shell@android:/ $
。执行此命令后)
进入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
通过PS所示的过程可被限制到那些通过管道通过grep的输出,即用于搜索文本的滤波器属于任何给定的用户。 例如,属于用户以用户名亚当过程可以用下面显示:
ps -ef | grep adam
-e选项生成的有关当前运行的每个进程的信息列表。 -f选项生成包含的信息较少的项目比-l选项每个进程的列表。