我跑了sudo lsof -p $(pidof foo)
,得到了很多这样的东西。有谁知道这些代表什么?我知道它们来自进程,但没有端口/IP 地址。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
foo 115450 root 592u sock 0,7 0t0 957442022 protocol: TCP
foo 115450 root 593u sock 0,7 0t0 956964126 protocol: TCP
foo 115450 root 594u sock 0,7 0t0 957091053 protocol: TCP
foo 115450 root 595u sock 0,7 0t0 957498237 protocol: TCP
foo 115450 root 596u sock 0,7 0t0 957077603 protocol: TCP
foo 115450 root 597u sock 0,7 0t0 957211699 protocol: TCP
答案1
如果斯蒂芬·哈里斯的答案因作为评论发布而被删除,我将其作为答案发布:
您的应用程序已在TCP 域中创建了一个套接字(可能通过socket(2)),但未将其绑定到任何端口(例如通过connect(2) 或listen(2) 或bind(2))。
答案2
尝试使用带有“-e trace=network”选项的 strace 来找出哪些代码错误地使用了套接字。例如,
[pid 16700] getsockopt(6, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
[pid 16700] getpeername(6, {sa_family=AF_INET, sin_port=htons(12345),
sin_addr=inet_addr("10.4.50.77")}, [112->16]) = 0
[pid 16700] getsockname(6, {sa_family=AF_INET, sin_port=htons(23456),
sin_addr=inet_addr("10.4.100.60")}, [112->16]) = 0
[pid 16700] setsockopt(6, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 16700] setsockopt(6, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 16700] setsockopt(6, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0
[pid 16700] setsockopt(6, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0