linux怎么查看进程的套接字,怎么查看一个进程打开哪些fd及对应的文件或套接字操作...

如何查看一个进程打开哪些fd及对应的文件或套接字操作

/*********************************************************************

* Author  : Samson

* Date    : 06/22/2015

* Test platform:

*              gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2

*              GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu)

* *******************************************************************/

在GNU Linux下使用原生套接字编写了服务端程序与客户端程序,按照常规,服务端程序都是会先创建一个socket并监听此端口的,而客户端程序主要是对服务端的连接,在只开启服务端程序的时候,使用lsof可以看到服务端的所有打开的文件的描述的,服务端程序的进程为29016,如下:

ufo@ufo:~/socket$ lsof -p 29016

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

oldser 29016 ufo cwd DIR 8,1 4096 2225845 /home/ufo/socket

oldser 29016 ufo rtd DIR 8,1 4096 2 /

oldser 29016 ufo txt REG 8,1 8203 2224940 /home/ufo/socket/oldser

oldser 29016 ufo mem REG 8,1 14768 1442612 /lib/x86_64-linux-gnu/libdl-2.13.so

oldser 29016 ufo mem REG 8,1 1599504 1442606 /lib/x86_64-linux-gnu/libc-2.13.so

oldser 29016 ufo mem REG 8,1 18888 1446570 /lib/x86_64-linux-gnu/liblsp.so

oldser 29016 ufo mem REG 8,1 136936 1442618 /lib/x86_64-linux-gnu/ld-2.13.so

oldser 29016 ufo DEL REG 0,4 0 /SYSVa5723213

oldser 29016 ufo 0u CHR 136,11 0t0 14 /dev/pts/11

oldser 29016 ufo 1u CHR 136,11 0t0 14 /dev/pts/11

oldser 29016 ufo 2u CHR 136,11 0t0 14 /dev/pts/11

oldser 29016 ufo 3u IPv4 550310 0t0 TCP localhost:5555 (LISTEN)

可以看到打开了5555这个端口进行监听;

使用客户端进行连接5555端口后:

ufo@ufo:~/socket$ lsof -p 29016

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

oldser 29016 ufo cwd DIR 8,1 4096 2225845 /home/ufo/socket

oldser 29016 ufo rtd DIR 8,1 4096 2 /

oldser 29016 ufo txt REG 8,1 8203 2224940 /home/ufo/socket/oldser

oldser 29016 ufo mem REG 8,1 14768 1442612 /lib/x86_64-linux-gnu/libdl-2.13.so

oldser 29016 ufo mem REG 8,1 1599504 1442606 /lib/x86_64-linux-gnu/libc-2.13.so

oldser 29016 ufo mem REG 8,1 18888 1446570 /lib/x86_64-linux-gnu/liblsp.so

oldser 29016 ufo mem REG 8,1 136936 1442618 /lib/x86_64-linux-gnu/ld-2.13.so

oldser 29016 ufo DEL REG 0,4 0 /SYSVa5723213

oldser 29016 ufo 0u CHR 136,11 0t0 14 /dev/pts/11

oldser 29016 ufo 1u CHR 136,11 0t0 14 /dev/pts/11

oldser 29016 ufo 2u CHR 136,11 0t0 14 /dev/pts/11

oldser 29016 ufo 3u IPv4 550310 0t0 TCP localhost:5555 (LISTEN)

oldser 29016 ufo 4u IPv4 550311 0t0 TCP localhost:5555->localhost:39905 (CLOSE_WAIT)

有的时候会出现一个叫name为anon_inode的行,那么这个是什么意思呢?

我在服务端程序里添加了一个epoll后,再次启动服务端程序后,出现了anon_inode这样的fd,如下图:

ufo@ufo:~/socket$ lsof -p 29381

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

epoll_ser 29381 ufo cwd DIR 8,1 4096 2225845 /home/ufo/socket

epoll_ser 29381 ufo rtd DIR 8,1 4096 2 /

epoll_ser 29381 ufo txt REG 8,1 9830 2229560 /home/ufo/socket/epoll_ser

epoll_ser 29381 ufo mem REG 8,1 14768 1442612 /lib/x86_64-linux-gnu/libdl-2.13.so

epoll_ser 29381 ufo mem REG 8,1 1599504 1442606 /lib/x86_64-linux-gnu/libc-2.13.so

epoll_ser 29381 ufo mem REG 8,1 18888 1446570 /lib/x86_64-linux-gnu/liblsp.so

epoll_ser 29381 ufo mem REG 8,1 136936 1442618 /lib/x86_64-linux-gnu/ld-2.13.so

epoll_ser 29381 ufo DEL REG 0,4 0 /SYSVa5723213

epoll_ser 29381 ufo 0u CHR 136,11 0t0 14 /dev/pts/11

epoll_ser 29381 ufo 1u CHR 136,11 0t0 14 /dev/pts/11

epoll_ser 29381 ufo 2u CHR 136,11 0t0 14 /dev/pts/11

epoll_ser 29381 ufo 3u IPv4 570623 0t0 TCP localhost:5555 (LISTEN)

epoll_ser 29381 ufo 4u 0000 0,9 0 2860 anon_inode

两个客户端连接服务端后:

ufo@ufo:~/socket$ lsof -p 29381

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

epoll_ser 29381 ufo cwd DIR 8,1 4096 2225845 /home/ufo/socket

epoll_ser 29381 ufo rtd DIR 8,1 4096 2 /

epoll_ser 29381 ufo txt REG 8,1 9830 2229560 /home/ufo/socket/epoll_ser

epoll_ser 29381 ufo mem REG 8,1 14768 1442612 /lib/x86_64-linux-gnu/libdl-2.13.so

epoll_ser 29381 ufo mem REG 8,1 1599504 1442606 /lib/x86_64-linux-gnu/libc-2.13.so

epoll_ser 29381 ufo mem REG 8,1 18888 1446570 /lib/x86_64-linux-gnu/liblsp.so

epoll_ser 29381 ufo mem REG 8,1 136936 1442618 /lib/x86_64-linux-gnu/ld-2.13.so

epoll_ser 29381 ufo DEL REG 0,4 0 /SYSVa5723213

epoll_ser 29381 ufo 0u CHR 136,11 0t0 14 /dev/pts/11

epoll_ser 29381 ufo 1u CHR 136,11 0t0 14 /dev/pts/11

epoll_ser 29381 ufo 2u CHR 136,11 0t0 14 /dev/pts/11

epoll_ser 29381 ufo 3u IPv4 570623 0t0 TCP localhost:5555 (LISTEN)

epoll_ser 29381 ufo 4u 0000 0,9 0 2860 anon_inode

epoll_ser 29381 ufo 5u IPv4 573356 0t0 TCP localhost:5555->localhost:39949 (CLOSE_WAIT)

epoll_ser 29381 ufo 6u IPv4 576894 0t0 TCP localhost:5555->localhost:39950 (CLOSE_WAIT)

查看fd是什么文件或套接字,通过查看FD列及NODE NAME列即可知道对应关系。以上例子可看到FD为3的是IPV4的监听套接字; localhost:5555->localhost:39905 (CLOSE_WAIT)行对应的是FD为4的连接,客户端的端口号为39905,其它依此类推。

说明:

lsof -p 29381

其中29381为服务端程序的进程号。

当然也可以通过以下页面所描述的方法进行查看,但是还是没有lsof方便。

http://blog.csdn.net/itdisciple/article/details/6859507

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值