查询网络端口被哪个进程/线程占用

背景

最近遇到一个问题,就是我去绑定8080端口时,发现errno是93(记不清了),表示已经被人用了,于是想去查是哪个进程或者线程。当然我也搜了代码,发现很多以网址的形式出现,还是从linux 系统去看吧。
标准的netstat -pt是可以把进程名显示出来的,但是android版的没有这个选项。

local_port to process_name

$ cat /proc/net/{tcp,udp,unix,raw}
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 11207 1 0000000000000000 100 0 0 10 0
num = sscanf(line,
“%*d: %32[0-9A-Fa-f]:%X ”
“%32[0-9A-Fa-f]:%X %X ”
“%lX:%lX %*X:%*X ”
“%*X %d %*d %lu “,
local_addr, &param->local_port,
rem_addr, &param->rem_port, &param->state,
&param->txq, &param->rxq,
&param->uid, &param->inode);
local_port = 0x19; inode = 11207;

$ cat /proc/net/unix | grep 136
0000000000000000: 00000003 00000000 00000000 0001 03 13693
0000000000000000: 00000003 00000000 00000000 0001 03 13614
0000000000000000: 00000002 00000000 00000000 0002 01 13692
0000000000000000: 00000002 00000000 00000000 0002 01 13636

for pid = 1860:
$ ls -li /proc/1860/fd/
15271 lrwx—— 1 root root 64 3月 14 22:54 0 -> /dev/null
15272 lrwx—— 1 root root 64 3月 14 22:54 1 -> /dev/null
15273 lrwx—— 1 root root 64 3月 14 22:54 2 -> /dev/null
15274 lrwx—— 1 root root 64 3月 14 22:54 3 -> socket:[13692]
15275 lrwx—— 1 root root 64 3月 14 22:54 4 -> socket:[13693]
15276 lrwx—— 1 root root 64 3月 14 22:54 5 -> anon_inode:[eventfd]
15277 lrwx—— 1 root root 64 3月 14 22:54 6 -> anon_inode:[eventfd]

inode = readlink(i) = {13692,13693}

$ cat /proc/1860/cmdline
/usr/lib/rtkit/rtkit-daemon #name

proc_name to thread_name

需要代码里面调了pthread_setname_np[1]

$ ./a.out 
Created a thread. Default name is: a.out
^Z
[1]+  已停止               ./a.out
H 显示线程 -C ‘a.out bash ps‘ 选择进程名列表
$ ps H -C a.out -o ‘pid tid cmd comm‘
  PID   TID CMD                         COMMAND
 3437  3437 ./a.out                     a.out
 3437  3438 ./a.out                     THREADFOO
$ cat /proc/3437/task/3437/comm
a.out
$ cat /proc/3437/task/3438/comm 
THREADFOO

然后把上面的用C或shell串起来就可以了。

[1] http://linux.die.net/man/3/pthread_setname_np

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。