android – 按包名查找正在运行的进程ID
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android – 按包名查找正在运行的进程ID,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1563字,纯文字阅读大概需要3分钟。
内容图文
![android – 按包名查找正在运行的进程ID](/upload/InfoBanner/zyjiaocheng/952/5b5f1a3a44064ef68cbbde1b8e61cbc3.jpg)
我正在编写一个脚本,我需要提供我的应用程序的PID.我可以通过以下命令列出所有进程及其PID,并可以看到我的应用程序的条目.
adb shell ps
这给了我一个巨大的进程列表.我需要一个条目(我可以进一步提供给另一个命令),所以我想用包名过滤这个结果. grep命令在我的Windows机器上不起作用.也尝试了以下命令,但它没有帮助.
adb shell ps name: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
在7.0之前的Android中,人们使用ps命令然后使用内置过滤器通过comm值(对于android应用程序是包名称的最后15个字符)或grep命令来解析其输出.如果名称的最后15个字符以数字开头并且默认情况下不包含grep直到Android 4.2,则comm过滤器不起作用.但即使找到了正确的生产线,仍然需要提取PID值.
有多种方法可以做到这一点.以下是使用单个sed命令查找进程和提取PID的方法:
adb shell "ps | sed -n 's/^[^ ]* *\([0-9]*\).* my\.app\.package$/\1/p'"
问题是,在Android 6.0之前默认不包括sed.
但是,如果您必须使用较旧的设备,则可以始终使用以下Android版本独立解决方案.它不使用任何外部命令 – 只是Android shell内置命令:
adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = my.app.package ]] && echo ${p##*/}; done"
寻找PID的最常见原因是在其他命令中使用它,比如kill.假设我们有多个logcat运行实例,我们想要一次性优雅地完成它们.只需在最后一个命令中用kill -2替换echo:
adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = logcat ]] && kill -2 ${p##*/}; done"
如果从Linux / OSX shell运行命令,请替换“with”.
内容总结
以上是互联网集市为您收集整理的android – 按包名查找正在运行的进程ID全部内容,希望文章能够帮你解决android – 按包名查找正在运行的进程ID所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。