一、前言
有时候我们会在Android设备中运行一些二进制文件。但是当这些文件运行在后台后,我们可能无法关闭他们。当我们希望获取到某个进程的pid,并通过kill命令停止他们时。一般做法我们使用ps命令查找想要的进程pid。但是当我们需要在我们的应用中做到这点,则需要准确地获取到进程pid。
二、命令
ps -eo COMM,PID,PPID,COMMAND|grep -E "^($regex)"|awk '{if ($2 ~ /^\(deleted\)$/) print $1 " " $3 " " $4 " " $5; else print $1 " " $2 " " $3 " " $4}'
- ps命令:列出用户进程列表
- -e:同-A,列出所有进程
- -o:输出字段而不是默认值,每个字段都有可选的
- COMM :可运行程序的文件名
- PID:进程ID
- PPID:父进程ID
- COMMAND:可运行程序的路径(可以根据这个确定是否是我们找寻的程序)
grep -E "^($regex)" 是用于过滤ps命令的结果,$regex是正则表达式,例如我要找寻开头是smbd和nmbd的进程,则可以写成grep -E "^(smbd|nmbd)"
awk命令是用于规范化输出结果。上面的ps命令会输出以下两种结果:
第一种:
smbd 5756 1 /data/data/com.xxx.xxx/files/bin/smbd
smbd 5758 5756 /data/data/com.xxx.xxx/files/bin/smbd
smbd 5759 5756 /data/data/com.xxx.xxx/files/bin/smbd
smbd 5773 5756 /data/data/com.xxx.xxx/files/bin/smbd
nmbd 5777 1 /data/data/com.xxx.xxx/files/bin/nmbd第二种(进程运行后源文件被删除):
smbd (deleted) 5756 1 /data/data/com.xxx.xxx/files/bin/smbd (deleted)
smbd (deleted) 5758 5756 /data/data/com.xxx.xxx/files/bin/smbd (deleted)
smbd (deleted) 5759 5756 /data/data/com.xxx.xxx/files/bin/smbd (deleted)
smbd (deleted) 5773 5756 /data/data/com.xxx.xxx/files/bin/smbd (deleted)
nmbd (deleted) 5777 1 /data/data/com.xxx.xxx/files/bin/nmbd (deleted)所以最后需要通过awk命令规范第二种输出的结果。
三、命令执行结果参考
这里仅截取了一部分
sh 2753 1274 /system/bin/sh
installer 2755 2753 /data/local/tmp/.studio/bin/installer
abb 2771 1274 /system/bin/abb
app_process64 2786 424 /system/bin/app_process64
logcat 3178 1274 /system/bin/logcat
[kworker/5:0-pm] 3183 2 [kworker/5:0-pm]
[kworker/1:0-events] 3448 2 [kworker/1:0-events]
[kworker/u17:5-csf_scheduler_gpu_idle_] 3556 2 [kworker/u17:5-csf_scheduler_gpu_idle_]
[kworker/0:2-events] 3579 2 [kworker/0:2-events]
[kworker/5:1H-events_highpri] 3614 2 [kworker/5:1H-events_highpri]
[kworker/2:0H-kblockd] 3631 2 [kworker/2:0H-kblockd]
[kworker/0:1H-mmc_complete] 3916 2 [kworker/0:1H-mmc_complete]
sh 3917 1274 /system/bin/sh
vm 3919 3917 /system/bin/vm
vm 3920 3919 /system/bin/vm
vm 3922 1 /system/bin/vm
vm 3924 3922 /system/bin/vm
sh 3926 3924 /system/bin/sh
sh 4000 1414 /system/bin/sh
app_process64 4015 424 /system/bin/app_process64
app_process64 4062 424 /system/bin/app_process64
pure-ftpd 4217 1 /data/user/0/com.station.pluginscenter/files/modules/pure-ftpd/pure-ftpd
webdav 4415 1 /data/user/0/com.station.pluginscenter/files/modules/station_webdav/webdav
web-server 4534 1 /data/user/0/com.station.pluginscenter/files/modules/webserver/web-server
[kworker/7:0-pm] 4575 2 [kworker/7:0-pm]