哪个线程监听特定的UDP端口

时间:2018-10-10 11:29:52

标签: linux multithreading udp netstat lsof

我跑了

# lsof | grep 10900

及其输出:

MyExecutab 103497        myuser    7u     IPv4             985833       0t0        UDP my.example.com:10900 
MyExecutab 103497 103498 myuser    7u     IPv4             985833       0t0        UDP my.example.com:10900 
MyExecutab 103497 103499 myuser    7u     IPv4             985833       0t0        UDP my.example.com:10900 
MyExecutab 103497 103500 myuser    7u     IPv4             985833       0t0        UDP my.example.com:10900 
MyExecutab 103497 103501 myuser    7u     IPv4             985833       0t0        UDP my.example.com:10900 
MyExecutab 103497 103502 myuser    7u     IPv4             985833       0t0        UDP my.example.com:10900 
MyExecutab 103497 103503 myuser    7u     IPv4             985833       0t0        UDP my.example.com:10900 

我试图找出哪个线程正在从UDP端口10900读取。

似乎从该端口读取了7个线程,对吗?

我觉得实际上只有一个线程正在读取,而lsof只是列出了所有子线程(在同一进程中)和父线程。

netstat -plun显示只有父线程(PID)正在侦听该端口:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 10.7.168.173:10900      0.0.0.0:*                           103497/MyExecutable 

我还检查了/proc/[pid]/fd。因为只有103497是PID,所以其余的都是TID,所以/proc/仅具有103497,而没有。

那么,真的有办法找出哪个线程在侦听特定的UDP端口吗?

我正在使用CentOS 7(内核3.10)。

谢谢!

1 个答案:

答案 0 :(得分:2)

运行strace -ffp <pid>,查看哪些线程使用文件描述符7。