在Linux上,我可以使用netstat-pntl | grep$PORT或fuser-n tcp$PORT来确定哪个进程(PID)正在侦听指定的tcp端口。如何在Mac OS X上获得相同的信息?
当前回答
这是我所需要的。
ps -eaf | grep `lsof -t -i:$PORT`
其他回答
对MichałKalinowski的回答稍有改进(我没有足够的声誉在那里留下评论):如果您试图发现进程正在监听一个编号为255及以下的端口,grep命令可能会打印与IP地址相关的行,而这些行与期望的结果不符。对于任何编号的端口,grep命令也可能错误地匹配设备的MAC地址或PID。为了改进这一点,我建议将命令更改为grep--color“:$1”
在macOS Big Sur和更高版本上,使用以下命令:
sudo lsof -i -P | grep LISTEN | grep :$PORT
或者只看到IPv4:
sudo lsof -nP -i4TCP:$PORT | grep LISTEN
对于旧版本,请使用以下表单之一:
sudo lsof -nP -iTCP:$PORT | grep LISTEN
sudo lsof -nP -i:$PORT | grep LISTEN
用端口号或逗号分隔的端口号列表替换$PORT。
如果需要有关#1024以下端口的信息,请在sudo前面加上空格。
-n标志用于显示IP地址而不是主机名。这使得命令执行得更快,因为获取主机名的DNS查找可能会很慢(对于许多主机来说几秒钟或一分钟)。
-P标志用于显示原始端口号,而不是解析名称(如http、ftp)或更深奥的服务名称(如dpserve、socalia)。
有关更多选项,请参见注释。
为了完整,因为经常一起使用:
要终止PID:
sudo kill -9 <PID>
# kill -9 60401
在OS X上,可以使用netstat的-v选项来提供相关的pid。
类型:
netstat -anv | grep [.]PORT
输出将如下所示:
tcp46 0 0 *.8080 *.* LISTEN 131072 131072 3105 0
PID是最后一列之前的数字,在本例中为3105
在雪豹(OS X 10.6.8)上,运行“man lsof”可获得:
lsof -i 4 -a
(实际手动输入为“lsof-i 4-a-p 1234”)
之前的答案在雪豹上不起作用,但我一直在尝试使用“netstat-nlp”,直到我看到pts在答案中使用了“lsof”。
这是我所需要的。
ps -eaf | grep `lsof -t -i:$PORT`
推荐文章
- 警告用户/local/mysql/data目录不属于mysql用户
- UDP和TCP比起来快多少?
- 在Mac OS X上使用鼠标聚焦(加上自动提升)
- 我在哪里可以找到Mac OS X Lion的“make”程序?
- 当我没有Mac的时候,在Mac/Safari上测试web应用程序
- 在Mac上安装MySQL后,使用ALTER USER语句重置MySQL root密码
- my.cnf文件在macOS上的位置
- 如何从Mac OS X上卸载MySQL ?
- 查找当前可执行文件的路径,不包含/proc/self/exe
- 在Mac上安装R -警告消息:设置LC_CTYPE失败,使用“C”
- 为什么cURL返回错误“(23)Failed writing body”?
- 节点和错误:EMFILE,打开的文件太多
- TCP连接的最大数据包大小
- 如何使用命令行工具为Mac OS X创建一个漂亮的DMG ?
- 由于环境错误无法安装包:[Errno 13]