Python 如何查找有关文件描述符的更多信息?
我正在尝试调试挂起的进程,进程id的strace输出有最后一行:Python 如何查找有关文件描述符的更多信息?,python,c,file-descriptor,Python,C,File Descriptor,我正在尝试调试挂起的进程,进程id的strace输出有最后一行: recvfrom(9, 从这一点我了解到进程正在等待套接字 但我不知道这是哪种或哪种类型的套接字。我如何才能发现更多关于这一点的信息?文件描述符9是否会提供更多信息?我如何使用此文件发现来了解更多关于它正在等待什么的信息 这是一个python进程,在linux中运行。请查看前面的strace输出,了解从open()返回文件描述符的时间(或者可能是socket()),您将在那里看到调用中使用的其他参数。查看前面的strace输出,了
recvfrom(9,
从这一点我了解到进程正在等待套接字
但我不知道这是哪种或哪种类型的套接字。我如何才能发现更多关于这一点的信息?文件描述符9是否会提供更多信息?我如何使用此文件发现来了解更多关于它正在等待什么的信息
这是一个python进程,在linux中运行。请查看前面的
strace
输出,了解从open()
返回文件描述符的时间(或者可能是socket()
),您将在那里看到调用中使用的其他参数。查看前面的strace
输出,了解从open()
返回文件描述符的时间(或者可能是socket()
),您将看到调用中使用的附加参数。因为您使用的是strace
,我假设您在Linux上,并且您知道进程id。在这种情况下,您可以在/proc
中找到大量信息。下面是一个操作示例
Dols-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
中找到大量信息。下面是一个示例。
Dols-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中运行。更新了问题。