lsof和监听端口


50

我正在尝试让所有进程都在Mac OS X上侦听网络连接。netstat没有该-p选项,我正在尝试使用lsof

lsof -i -sTCP:LISTEN

给了我听的过程的公平清单,但不是全部。例如,我可以通过telnet到端口10080,在该端口上我有一个进程在监听连接,但这未在的输出中显示lsof。我想念什么?

$ telnet localhost 10080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> Connection closed.

$ sudo lsof -n -i | grep 10080
$

3
lsof的输出是amanda不是10080?
Jon Lin)

3
@JonLin我没有注意到这-n只会影响地址,而不会影响端口。要获取端口号,我也必须使用-P。谢谢
Matteo

3
@JonLin:但是您有帖子lsof -i -sTCP:LISTEN,并且没有发布,-n也没有显示10080。因此,您必须使用-P
Hanan N.

Answers:


75
sudo lsof -iTCP -sTCP:LISTEN
sudo lsof -iTCP -sTCP:LISTEN -P
sudo lsof -iTCP -sTCP:LISTEN -P -n
sudo lsof -iTCP -sTCP:LISTEN -n

... | wc -l在我经常使用的Lion MBP上,它们都返回相同的32个条目()。

-P -n防止lsof进行名称解析,并且不会阻止。缺少任何一个,可能会很慢。

对于UDP :sudo lsof -iUDP -P -n | egrep -v '(127|::1)'。如果没有-n-P,则需要很长时间。

提醒:这不包括防火墙设置。


3
是的,问题是缺少-P。我错误地认为-n不仅适用于IP,而且适用于端口号。
Matteo

-1
  1. 首先找出已占用所需端口(例如5434)的进程ID(pid):

    ps aux | grep 5434
    
  2. 终止该过程:

    kill -9 <pid>
    

5
ps aux没有列出进程正在使用的端口
Matteo

我同意Matteo的观点;您确定没有执行netstat -anp之类的操作吗?grep 5434(它将返回在5434上正在侦听的内容的列表,并且第一列或第二列是pid?)
Foon 2015年

6
因此,只有在执行字符串中明确指定了端口号的进程被调用且该字符串的该部分将被grep匹配的情况下,该命令才起作用。
techraf

1
使用kill -9作为摆脱一个过程的第一个选项是一个极端的选择。另外,这实际上并不能回答问题,这不是要杀死事物,而是要找出正在运行的问题。
林德斯(Lindes)'17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.