![运行“网络重启”,netstat 显示没有开放端口,服务器仍然显示端口正在使用中](https://linux22.com/image/1399430/%E8%BF%90%E8%A1%8C%E2%80%9C%E7%BD%91%E7%BB%9C%E9%87%8D%E5%90%AF%E2%80%9D%EF%BC%8Cnetstat%20%E6%98%BE%E7%A4%BA%E6%B2%A1%E6%9C%89%E5%BC%80%E6%94%BE%E7%AB%AF%E5%8F%A3%EF%BC%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BB%8D%E7%84%B6%E6%98%BE%E7%A4%BA%E7%AB%AF%E5%8F%A3%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E4%B8%AD.png)
我正在用 django (python) 进行一些 Web 开发。该程序在端口 8000 上运行自己的开发服务器。我关闭了服务器,现在需要重新启动它,但我收到“错误:该端口已被使用”
我做了一个sudo /etc/init.d/network restart eth0
并且返回结果是:
Shutting down network interfaces:
Setting up network interfaces:
eth0 Startmode is 'manual' -> skipping skipped
eno16777736 device: Advanced Micro Devices, Inc.
eno16777736 DHCP4 client (dhcpcd) is running
eno16777736 IP address: 192.168.163.128/24
eno16777736 DHCP6 client (dhclient6) is running
eno16777736 . . . but is still waiting for data
eno16777736 valid_lft forever preferred_lft forever IP address: 192.168.163.128/24
eno16777736 is up done
lo
lo valid_lft forever preferred_lft forever IP address: 127.0.0.1/8
lo is up done
然后运行sudo netstat -np | grep 8000
没有任何结果。但是当我尝试再次运行服务器时,它给出了相同的错误。重新启动机器可以完全解决问题,但我不能每次都这样做。
答案1
每当我遇到这种情况时,我都会运行ps aux | grep ruby
并查找符合我条件的服务列表。就我而言,我进行 Ruby on Rails 开发,因此我将使用grep ruby
。
一旦找到我的PID
(第二列),我就执行命令kill -9 PID
这将终止该进程,然后我可以使用相同的端口重新启动我的服务。
答案2
您忘记了 nestat 的“-a”选项。否则,仅使用“-np”只会为您提供“非监听”套接字(即连接的套接字)。因此,最终尝试使用“-npa”以确保您获得完整的数据(监听和非监听)。
话虽如此,我建议在这种情况下这样做:
lsof | grep TCP | grep 8000
如果您已经安装了 lsof。
如果服务器正在监听(或想要监听)所有网络接口,则它可能仍在等待环回设备。因此,我的建议是尝试使用上述的 lsof。