运行“网络重启”,netstat 显示没有开放端口,服务器仍然显示端口正在使用中

运行“网络重启”,netstat 显示没有开放端口,服务器仍然显示端口正在使用中

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

相关内容