程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> 如何查看一個進程打開哪些fd及對應的文件或套接字操作

如何查看一個進程打開哪些fd及對應的文件或套接字操作

編輯:SyBase教程

如何查看一個進程打開哪些fd及對應的文件或套接字操作


在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方便。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved