Python 如何查找有关文件描述符的更多信息?

Python 如何查找有关文件描述符的更多信息?,python,c,file-descriptor,Python,C,File Descriptor,我正在尝试调试挂起的进程,进程id的strace输出有最后一行: recvfrom(9, 从这一点我了解到进程正在等待套接字 但我不知道这是哪种或哪种类型的套接字。我如何才能发现更多关于这一点的信息?文件描述符9是否会提供更多信息?我如何使用此文件发现来了解更多关于它正在等待什么的信息 这是一个python进程,在linux中运行。请查看前面的strace输出,了解从open()返回文件描述符的时间(或者可能是socket()),您将在那里看到调用中使用的其他参数。查看前面的strace输出,了

我正在尝试调试挂起的进程,进程id的strace输出有最后一行:
recvfrom(9,
从这一点我了解到进程正在等待套接字

但我不知道这是哪种或哪种类型的套接字。我如何才能发现更多关于这一点的信息?文件描述符9是否会提供更多信息?我如何使用此文件发现来了解更多关于它正在等待什么的信息


这是一个python进程,在linux中运行。

请查看前面的
strace
输出,了解从
open()
返回文件描述符的时间(或者可能是
socket()
),您将在那里看到调用中使用的其他参数。

查看前面的
strace
输出,了解从
open()
返回文件描述符的时间(或者可能是
socket()
),您将看到调用中使用的附加参数。

因为您使用的是
strace
,我假设您在Linux上,并且您知道进程id。在这种情况下,您可以在
/proc
中找到大量信息。下面是一个操作示例

Do
ls-l/proc//fd
。将有一个条目对应于您感兴趣的fd,并且该fd应该是一个套接字:

$ ls -l /proc/3311/fd
total 0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 0 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 1 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 2 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 3 -> socket:[23182]
在上面的示例中,
3
是感兴趣的套接字。在本例中,
socket
后面的数字是inode编号,
23182

现在在文件
/proc/net/tcp
中查找inode:

$ cat /proc/net/tcp | grep 23182
   2: 0F02000A:C43B 8EDC3AD8:0050 01 00000000:00000000 00:00000000 00000000  1000        0 **23182** 1 0000000000000000 23 0 0 10 -1
/proc/net/tcp
的第一行告诉您每个字段代表什么:

 sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
因此,在本例中,远程地址是
8EDC3AD8:0050
。这是以十六进制和网络字节顺序排列的ip地址:端口号。如果将其转换为十进制,则为
216.58.220.142:80

这告诉你它实际上是一个到google.com的80端口的TCP连接


如果您在
/proc/net/tcp
中找不到inode编号,请尝试目录中的其他协议,可能是
/proc/net/udp
,因为您使用的是
strace
,我假设您在Linux上,并且知道进程id。在这种情况下,您可以在
/proc
中找到大量信息。下面是一个示例。

Do
ls-l/proc//fd
。将有一个条目对应于您感兴趣的fd,并且该fd应该是一个套接字:

$ ls -l /proc/3311/fd
total 0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 0 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 1 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 2 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 3 -> socket:[23182]
在上面的示例中,
3
是感兴趣的套接字。在本例中,
socket
后面的数字是inode编号,
23182

现在在文件
/proc/net/tcp
中查找inode:

$ cat /proc/net/tcp | grep 23182
   2: 0F02000A:C43B 8EDC3AD8:0050 01 00000000:00000000 00:00000000 00000000  1000        0 **23182** 1 0000000000000000 23 0 0 10 -1
/proc/net/tcp
的第一行告诉您每个字段代表什么:

 sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
因此,在本例中,远程地址是
8EDC3AD8:0050
。这是以十六进制和网络字节顺序排列的ip地址:端口号。如果将其转换为十进制,则为
216.58.220.142:80

这告诉你它实际上是一个到google.com的80端口的TCP连接


如果在
/proc/net/tcp
中找不到inode号,请尝试目录中的其他协议,可能是
/proc/net/udp

什么操作系统?是Python还是C?为什么要添加这两个标记?这是一个在linux中运行的Python进程。更新了问题。什么操作系统?是Python还是C?为什么要添加这两个标记?这是python进程在linux中运行。更新了问题。