【发布时间】:2018-08-29 02:02:20
【问题描述】:
我今天遇到一个问题:
当我启动HDP docker容器时,出现错误:
listen tcp 0.0.0.0:8086: bind: address already in use
根据报错信息,我知道 8086 端口已经在使用,所以我尝试了一些命令来确定哪个程序正在使用 8086 端口。
lsof -i:8086
lsof -i tcp:8086
lsof | grep 8086
但是上面的所有命令都没有输出!
我对此感到非常困惑,在谷歌搜索后,我尝试了另一个命令:
netstat -pna | grep 8086
我从这个命令得到了正确的输出。
我知道lsof 和netstat 之间的一些区别,但我真的不知道为什么我无法从lsof -i:8086 获得任何输出?
以下是我从谷歌搜索的两个命令之间的一些区别:
netstat(net statistic) 是基于连接的,它显示 NW 连接(udp/tcp 端口)、路由表、接口、多播成员资格等。
lsof(list of open files) 是基于应用程序的,这有点像 netstat + ps,在那里你可以看到所有访问的端口、NW 连接等。 但 lsof 包括我的本地 emacs 窗口终端会话(tty dev/pts/n)之类的东西,它不是 netstat 的一部分
【问题讨论】:
-
lsof 和 netstat 之间没有区别,你应该问
Why lsof -i:8086没用?否则你只会得到谷歌和手册页的答案。