在Linux上,我可以使用netstat-pntl | grep$PORT或fuser-n tcp$PORT来确定哪个进程(PID)正在侦听指定的tcp端口。如何在Mac OS X上获得相同的信息?
当前回答
直到macOS 13 Ventura,每个版本的macOS都支持此功能:
sudo lsof-iTCP-sTCP:列表-n-P
就我个人而言,我在~/.bash_profile中使用了这个简单的函数:
listening() {
if [ $# -eq 0 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P
elif [ $# -eq 1 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
else
echo "Usage: listening [pattern]"
fi
}
然后,listing命令为您提供了一个在某个端口上侦听的进程列表,并为某个模式侦听smthgreps。
有了这一点,很容易询问特定的进程,例如监听dropbox或端口,例如监听22。
lsof命令有一些专门的选项来询问端口、协议、进程等,但就我个人而言,我发现上面的函数更方便,因为我不需要记住所有这些低级选项。lsof是一个非常强大的工具,但不幸的是使用起来不太舒服。
其他回答
我是一个Linux人。在Linux中,使用netstat-ltpn或这些字母的任何组合都非常容易。但在Mac OS X netstat中,grep LISTEN是最人性化的。其他的非常难看,在排除故障时很难记住。
在macOS上,这里有一个简单的方法,可以通过netstat获取监听特定端口的进程ID。此示例查找端口80上提供内容的进程:
查找端口80上运行的服务器
netstat -anv | egrep -w [.]80.*LISTEN
样本输出
tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0
最后一列的第二个是PID。在上面,它是715。
选项
-a-显示所有端口,包括服务器使用的端口
-n-显示数字,不要查找名称。这使命令更快
-v-verbose输出,以获取进程ID
-w-搜索单词。否则,命令将返回端口8000和8001的信息,而不仅仅是“80”
LISTEN-仅为LISTEN模式下的端口(即服务器)提供信息
在最新的macOS版本上,可以使用以下命令:
lsof -nP -i4TCP:$PORT | grep LISTEN
如果你觉得很难记住,那么也许你应该创建一个bash函数,并用一个更友好的名称来导出它
vi ~/.bash_profile
然后将以下行添加到该文件并保存。
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}
现在,您可以在终端中键入listening_on 80,并查看哪个进程正在侦听端口80。
对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
- Mac OS X中的环境变量
- WebSockets和纯TCP之间的根本区别是什么?
- 如何从macOS完全卸载蟒蛇
- 如何配置Mac OS X术语,使git有颜色?
- 我如何确定文件编码在OS X?
- 使iTerm以与其他操作系统相同的方式翻译“元键”
- 错误:无法在ARM处理器上的Homebrew中安装英特尔默认前缀(/usr/local)
- 在Mac OS X上哪里安装Android SDK ?
- Mac/OS X上的/var/lib/docker在哪里
- Xcode构建失败“架构x86_64未定义的符号”
- 在OSX 10.11中安装Scrapy时,“OSError: [Errno 1]操作不允许”(El Capitan)(系统完整性保护)
- 如何在Mac OS X 10.6中使硬件发出哔哔声
- 从Cocoa应用程序执行一个终端命令
- Android Studio无法找到有效的Jvm(与MAC OS相关)