2013-02-09 263 views
0

任何人都可以告訴我如何從Android shell中PS命令的輸出中獲取PID。 例如從輸出:如何從Android shell中的PS命令輸出中獲取PID

u0_a51 20240 38 132944 22300 ffffffff 40037ebc S com.example.poc_service 

PID值20240要得到。我試過

ps -ef | grep com.example.poc_service 

但無濟於事。 pgrep也未被識別。

+0

什麼是「關鍵字」,即您在ps輸出中搜索什麼? (很容易隔離PID列,我會用'ps | awk'{print $ 2}'') – 2013-02-09 21:49:49

+0

感謝Anton的回覆。但它會拋出錯誤** awk not found .. **似乎Android shell不支持所有的linux命令 – srooth 2013-02-09 21:54:05

+0

試試'ps -C com.example.poc_service -o pid ='(note capital'-C'。不,我不確定它是否工作) – 2013-02-09 22:00:08

回答

0

它非常討厭,但它的工作原理:

for pid in `ls /proc`; do 
    cmd=`cat $pid/cmdline 2> /dev/null`; 

    if [ "X$cmd" == "Xcom.example.poc_service" ]; then 
     echo $pid; 
    fi 
done 

或一條線:

for pid in `ls /proc`; do cmd=`cat $pid/cmdline 2> /dev/null`; if [ "X$cmd" == "X/system/bin/mm-qcamera-daemon" ]; then echo $pid; fi done 
+0

不錯的解決方案。在echo $ pid之後添加一箇中斷,將使它更有效率,但它更有效 – 2017-05-26 13:46:46

3

如果你在Android的shell訪問也可以使用pidof

# pidof com.example.poc_service 
20240 

但是,要小心,因爲可能有多個進程匹配...

+1

這看起來很有希望,但是當我運行它,我得到一堆pid,從「1 2 3 6 ...」開始。任何線索發生了什麼事情? – 2016-09-15 09:30:01

+0

@JohannesBrodwall你有沒有得到任何替代品? – 2016-10-14 01:00:59

+0

@JohannesBrodwall可能因爲這個過程運行在多個線程,也可以是星星結束了一堆子流程。 – not2qubit 2017-05-27 09:47:06

0

grep,egrepfgrep,rgrep均未在Android上提供。

如果您正在使用UnixLinuxMacCygwin,你可以管adb shell命令的輸出,以獲得您想要的結果。

$ adb shell ps |grep settings 
system 23846 71 111996 22676 ffffffff 00000000 S com.android.settings 
$ adb shell ps |grep settings |awk '{print $2}' 
23846