我正在用 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。