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

背景

最近遇到一个问题,,就是我去绑定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 0000000000 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.outH 显示线程 -C ‘a.out bash ps’ 选择进程名列表$ ps H -C a.out -o ‘pid tid cmd comm’ PID TID CMDCOMMAND ./a.outTHREADFOO$ cat /proc/3437/task/3437/comma.out$ cat /proc/3437/task/3438/comm THREADFOO然后把上面的用C或shell串起来就可以了。

[1]

自信的生命最美丽!

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

相关文章:

你感兴趣的文章:

标签云: