没有root权限是挺不方便的,一番折腾还是总结出了一些办法。
首先确定要找什么端口,这个就不说了,看地址栏看报错等等各种信息找,例如确定是8082端口。
# 试图查看当前占用端口
netstat -anle | more
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN
tcp 0 0 192.168.2.180:43340 183.232.93.146:8080 CLOSE_WAIT
tcp 0 0 192.168.2.180:43879 110.76.30.60:443 ESTABLISHED
...
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 8198 /dev/socket/property_se
rvice
unix 2 [ ACC ] STREAM LISTENING 8460 /dev/socket/ims_qmid
unix 100 [ ] DGRAM 7182 /dev/socket/logdw
unix 2 [ ACC ] SEQPACKET LISTENING 7185 /dev/socket/logdr
unix 2 [ ACC ] STREAM LISTENING 7187 /dev/socket/logd
unix 2 [ ACC ] STREAM LISTENING 9483917 @webview_devtools_remo
te_17066
unix 2 [ ACC ] STREAM LISTENING 10785 /dev/socket/zygote
...
可以看到8082端口处于LISTEN状态确实在占用,netstat的e参数如果幸运的话可以看到inode和uid等信息,博主这手机不幸运不显示,下一个。
cat /proc/net/tcp6 | grep 1F92
sl local_address remote_address
st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
1: 0000000000000000FFFF00000100007F:8E52 00000000000000000000000000000000:000
0 0A 00000000:00000000 00:00000000 00000000 1000 0 49896 1 00000000 100
0 0 2 -1
0: 00000000:1F92 00000000:0000 0A 00000000:00000000 00:00000000 00000000 10119 0 9472581 1 00000000 100 0 0 10 -1
...
1F92就是8082的16进制。可以看到uid为10119,根据安卓用户命名规律,uid(10119) = user(u0_a119),也就是uid - 10000。
shell@virgo:/ $ ps | grep u0_a119
u0_a119 16369 361 1170872 187660 sys_epoll_ 00000000 S com.tencent.tim
u0_a119 16415 361 987536 73316 sys_epoll_ 00000000 S com.tencent.tim:MSF
u0_a119 16929 361 953392 58408 sys_epoll_ 00000000 S com.tencent.tim:Daemon
u0_a119 16948 1 5748 736 flock_lock 00000000 S app_d
u0_a119 16957 361 954944 58556 sys_epoll_ 00000000 S com.tencent.tim:assist
u0_a119 16976 1 5748 736 flock_lock 00000000 S app_d
u0_a119 17002 1 5748 736 flock_lock 00000000 S app_d
u0_a119 17066 361 1060356 93592 sys_epoll_ 00000000 S com.tencent.tim:mail
u0_a119 17297 361 960764 65388 sys_epoll_ 00000000 S com.tencent.tim:dataline
完事,最后附赠一个杀进程的方式。
# 非ROOT结束app进程的办法
am force-stop com.tencent.tim