码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-15 10:54:05      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:网络   process   linux内核   

背景

最近遇到一个问题,就是我去绑定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

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

标签:网络   process   linux内核   

原文地址:http://blog.csdn.net/deyangliu/article/details/44274869

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!