我有一个正在运行的应用程序(C#/ mono)似乎在以下系统调用上循环:(我通过一系列的strace确定了这一点,发现此调用是目前唯一正在进行的)
recvfrom([sockfd], "", [length], 0, NULL, NULL) = 0
读取recvfrom(http://linux.die.net/man/2/recvfrom)我发现第一个参数 sockfd 代表套接字文件描述符。
在不停止应用程序并包含调试逻辑/额外冗长以让我知道 sockfd 绑定到哪个套接字地址的情况下,有什么方法可以查看它吗?
我已经尝试过寻找可以从系统获得这些信息的任何参考资料,但没有提出太多
提前致谢,
答案 0 :(得分:3)
您可以使用lsof
命令列出类似这样的程序的所有打开的IP套接字
lsof | grep pid.*sd.*IP
其中
pid
将替换为程序进程ID和sd
将被套接字描述符替换,如strace
。答案 1 :(得分:1)
运行
lsof -p PID -a -d FD
查看进程FD
的描述符PID
是什么。你可以运行
lsof -p PID
查看进程使用的所有描述符,套接字和活动内存映射,以及
lsof -i4 -i6
查看所有进程的所有Internet连接。 man page包含有关lsof
命令的更多信息,但它非常复杂;但是,示例部分是说明性的。