Find out the running process ID by package name
Solution 1:
Since Android 7.0 the easiest way to find out the process ID by package name is to use pidof
command:
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)
Just run it like this:
adb shell pidof my.app.package
In Android before 7.0 people used ps
command and then parsed its output using either built-in filter by comm
value (which for android apps is the last 15 characters of the package name) or grep
command. The comm
filter did not work if the last 15 characters of the name started with a digit and the grep
was not included by default until Android 4.2. But even after the proper process line was found the PID
value still needed to be extracted.
There were multiple ways to do that. Here is how finding the process and extracting PID could be done with a single sed
command:
adb shell "ps | sed -n 's/^[^ ]* *\([0-9]*\).* my\.app\.package$/\1/p'"
Again the problem is that sed
was was not included by default until Android 6.0.
But if you must use an older device you can always use the following Android version independent solution. It does not use any external commands - just Android shell built-ins:
adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = my.app.package ]] && echo ${p##*/}; done"
The most popular reason for looking for a PID is to use it in some other command like kill
. Let's say we have multiple instances of logcat
running and we want to finish them all gracefully at once. Just replace the echo
with kill -2
in the last command:
adb shell "for p in /proc/[0-9]*; do [[ $(<$p/cmdline) = logcat ]] && kill -2 ${p##*/}; done"
Replace "
with '
if running the commands from Linux/OSX shell.
Solution 2:
Instead of using adb shell ps
, firstly enter adb shell
and then use ps
.
Step by step:
Enter
adb shell
command while a device (or emulator) is connected.
(Command line prefix will beshell@android:/ $
after executing this command.)Enter
ps | grep <package_name_to_be_filtered>
(i.e.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
Solution 3:
The processes shown by ps can be limited to those belonging to any given user by piping the output through grep, a filter that is used for searching text. For example, processes belonging to a user with a username adam can be displayed with the following:
ps -ef | grep adam
The -e option generates a list of information about every process currently running. The -f option generates a listing that contains fewer items of information for each process than the -l option.