linux下查看進程使用文件描述符的詳細信息

        由於近期在項目中遇到socket通信,和服務器端建立了TCP連接,但是要向服務器發送的數據卻沒發上去,分析沒發出去的原因可能是:應用程序進程把文件描述符0關閉了,然後socket獲取到了0作爲socket通信的文件描述符,然後建立TCP成功,但是由於0是系統的標準輸入文件描述符,導致發送數據異常。

       上述的原因只是推測,並沒有確切的證據,正好今天早上發現現場的設備出現不上去報文的情況,所以想自己查看一下情況,找到原因的確切證據,故問度娘要相關信息,度娘說,要查看進程的相關詳細信息,都在/proc/PID/下的目錄中。下面以進程號820爲例來說。我想查看文件描述符0用於什麼用途了,使用命令

     ls -l /proc/820/fd 或 ll /proc/820/fd

命令會列出fd下每個文件的詳細信息,能夠看到每個文件描述符對應的文件,或者用途。

命令在我故障設備上的運行結果如下:

[root@jx fd]#ll /proc/820/fd
total 0
dr-x------    2 root     root             0 Aug  7 08:30 .
dr-xr-xr-x    7 root     root             0 Jul 31 10:10 ..
lrwx------    1 root     root            64 Aug  7 09:13 0 -> socket:[26598188]
l-wx------    1 root     root            64 Aug  7 09:13 1 -> /dev/null
l-wx------    1 root     root            64 Aug  7 09:13 2 -> /dev/null
lrwx------    1 root     root            64 Aug  7 09:13 3 -> /mnt/database/Configdb.db
lrwx------    1 root     root            64 Aug  7 09:13 4 -> /mnt/database/RetransmitData.db
lrwx------    1 root     root            64 Aug  7 09:13 5 -> /mnt/database/Hisdatadb.db
lrwx------    1 root     root            64 Aug  7 09:13 6 -> /mnt/database/Curdatadb.db

文件描述0用於socket連接,此處很明確的證明了我的猜測。


       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章