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 では、コマンドを使用してから、組み込みの値によるフィルター (Android アプリの場合はパッケージ名の最後の 15 文字) またはコマンドps
を使用して、その出力を解析していました。名前の最後の 15 文字が数字で始まる場合、フィルタは機能せず、Android 4.2 までデフォルトで含まれていませんでした。しかし、適切なプロセス ラインが見つかった後でも、値を抽出する必要がありました。comm
grep
comm
grep
PID
それには複数の方法がありました。プロセスの検索と PID の抽出を 1 つのsed
コマンドで実行する方法を次に示します。
adb shell "ps | sed -n 's/^[^ ]* *\([0-9]*\).* my\.app\.package$/\1/p'"
ここでも問題は、sed
Android 6.0 までデフォルトで含まれていなかったことです。
ただし、古いデバイスを使用する必要がある場合は、次の Android バージョンに依存しないソリューションをいつでも使用できます。外部コマンドは使用せず、Android シェルの組み込みのみを使用します。
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 シェルからコマンドを実行する場合は に"
置き換えます。'