我跑了
# 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)。
谢谢!
答案 0 :(得分:2)
运行strace -ffp <pid>
,查看哪些线程使用文件描述符7。