追踪套接字(文件)描述符到绑定的地址

3

我有一个正在运行的应用程序(C#/mono),似乎正在循环执行以下系统调用:(我通过运行strace确定了这一点,并发现当前只有这个调用被执行)

recvfrom([sockfd], "", [length], 0, NULL, NULL)   = 0

阅读关于recvfrom (http://linux.die.net/man/2/recvfrom)的说明,我发现第一个参数sockfd代表套接字文件描述符。
不停止应用程序并包含调试逻辑/额外冗长的信息以让我知道sockfd绑定到哪个套接字地址,是否有任何方法来查找这个呢?
我已经尝试过在系统中寻找这些信息可能会被提供的任何参考资料,但是没有什么结果。
提前致谢。
2个回答

3
你可以使用lsof命令列出一个程序的所有打开的IP套接字,如下所示:
lsof | grep pid.*sd.*IP

这里

  • pid 需要替换为程序的进程 ID,
  • sd 需要替换为套接字描述符,可以通过 strace 查看。

2

运行

lsof -p PID -a -d FD

想要查看进程 PID 的描述符 FD 是什么,你可以运行以下命令:

lsof -p PID

要查看进程使用的所有描述符、套接字和活动内存映射,请执行以下操作:

lsof -i4 -i6

查看所有进程的互联网连接。 man页面上包含有关lsof命令的更多信息,但它相当复杂; 但是,“示例”部分是说明性的。


1
@alk:这比过滤输出要快得多——这就是我最初发现它们的原因:我厌倦了等待我的 lsof | awk ... 咒语完成。man page 是我知道的最混乱的页面之一;除了示例部分之外,阅读任何内容都容易引起挫败感.. :) - Nominal Animal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接