adb:从adb shell中查找PID

10
我正在尝试获取adb shell内部进程的PID。因此,我正在执行adb shell命令,以获取Android shell。现在,如果我要使用常规shell获取PID,我会使用以下命令:
adb shell ps | grep android.process.acore | sed 's/\s\s*/ /g' | cut -d ' ' -f 2

或者

adb shell ps | grep android.process.acore | awk '{ print $2 }'

我获取了PID(一个数字,在ps | grep android.process.acore的第二个字段中)的输出。
然而,如果我在android shell中运行上述命令(在执行adb shell之后),我将分别得到/system/bin/sh: sed: not found/system/bin/sh: awk: not found的错误。这意味着这些命令在adb shell中不可用。但是,grep可以正常工作。 adb shellps | grep android.process.acore的输出为:
XXX_x21   11826 441   502296 39028 ffffffff 4010ff6c S android.process.acore

我正在寻找数字11826。如何在adb shell中提取它?

另外,请问是否有一种直接获取adb shell中PID的方法。

谢谢, Rumit


你安装了 busybox 吗? - Alex P.
5个回答

20

从6.0版本开始,Android已经包含了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)

1
这是正确的答案。 adb shell pidof com.yourapp - keios

15

不确定是否可以直接获取PID,但您可以尝试以下操作

set `ps |grep android.process.acore`
echo $2

这个命令将ps命令的输出设置为变量$1、$2、$3等。PID值在$2中。


嗨,史蒂夫,感谢你的回答。然而,我被困在使用adb shell内的命令,通过java runexec()执行。请参阅此处的详细信息:http://stackoverflow.com/questions/21321085/command-with-pipe-and-spaces-does-not-work-with-runtime-exec 任何帮助都将不胜感激。问候, - rumit patel

0

我尝试了这个,它似乎有效:

adb shell "set "ps | grep android.process.media"; kill -9 $2"

0

我尝试了这个方法,似乎可以工作:

  1. adb shell
  2. ps -A | grep "android.process.acore"

0
adb shell pidof [package name]

或者

adb shell pidof -s [package name]

-s选项是用于单次运行,仅返回一个pid。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接