【问题标题】:Freeing up a TCP/IP port?释放 TCP/IP 端口?
【发布时间】:2010-10-19 12:48:08
【问题描述】:

netstat -tulnap 显示正在使用的端口。如何在 Linux 中释放一个端口?

【问题讨论】:

    标签: linux networking tcp port


    【解决方案1】:

    正如其他人所说,您必须终止正在侦听该端口的所有进程。最简单的方法是使用fuser(1) 命令。例如,要查看在端口 80 上侦听 HTTP 请求的所有进程(以 root 身份运行或使用 sudo):

    # fuser 80/tcp
    

    如果您想杀死它们,只需添加-k 选项即可。

    【讨论】:

    • 我发现向端口发送请求也会清除它(虽然我不是 linux 专家)
    • 在 Debian 上安装 fuser:sudo apt-get install psmisc (bitflop.com/document/107)
    • 它成功了,但我也必须在 CentOs 7 上安装 psmisc (sudo yum install psmisc)
    • kill -9 $(fuser 80/tcp 2>/dev/null)
    【解决方案2】:

    要在 Linux 中终止特定端口,请使用以下命令

    sudo fuser -k Port_Number/tcp
    

    用你占用的端口替换Port_Number

    【讨论】:

    • 这实际上杀死了打开端口的进程,而不是端口本身。
    【解决方案3】:

    假设您是root 用户,"netstat --programs" 命令将为您提供进程信息。然后你将不得不杀死“冒犯”的进程,它很可能会再次启动只是为了惹恼你。

    根据您实际尝试实现的目标, 该问题的解决方案将根据持有这些端口的进程而有所不同。例如,您可能需要禁用服务(假设它们不需要)或将它们配置为使用不同的端口(如果您确实需要它们但您需要更多的端口)。

    【讨论】:

      【解决方案4】:

      检查所有端口:

      netstat -lnp
      

      关闭一个打开的端口:

      fuser -k port_no/tcp
      

      例子:

      fuser -k 8080/tcp
      

      在这两种情况下,如果需要,您都可以使用sudo 命令。

      【讨论】:

      • 注意:fuser 会杀死进程而不是端口。这意味着如果港口陷入困境,它还能工作吗?这不是正确的答案。
      • 复制前两个答案。
      【解决方案5】:

      在终端类型中:

      netstat -anp|grep "port_number"

      它将显示端口详细信息。转到最后一列。 它将采用这种格式。例如:- PID/java

      然后执行:

      kill -9 PID. Worked on Centos5

      对于 MAC:

      lsof -n -i :'port-number' | grep LISTEN
      

      示例响应:

      java   4744 (PID)  test  364u  IP0 asdasdasda   0t0  TCP *:port-number (LISTEN)
      

      然后执行:

      kill -9 PID 
      

      在 Macbook 上工作

      【讨论】:

      • 显然,如果该端口的 PID 列为空,这将不起作用
      • ...如果您无权查看进程,就会发生这种情况...尝试sudo netstat 实际查看 PID :)
      • 我试图通过 putty cli 杀死亚马逊 ec2 实例上的一个端口。永远说它没有运行任何进程,但端口(角度应用程序为 4200)仍然打开。这是唯一对我有用的命令。
      【解决方案6】:

      您可以使用tcpkilldsniff 包的一部分)来终止您需要的端口上的连接:

      sudo tcpkill -9 port PORT_NUMBER
      

      【讨论】:

      • 这只是挂起$ sudo tcpkill -9 port 5432 tcpkill: listening on lxcbr0 [port 5432]
      【解决方案7】:

      sudo killall -9 "进程名"

      【讨论】:

        【解决方案8】:

        关闭计算机总是会杀死我的进程。

        【讨论】:

        • 很少会关闭服务器。
        • 你拿到“最有趣”的徽章了吗?
        • 无需关闭计算机。
        • 有史以来最好的主意 10/10
        • 与其他一些答案不同,这肯定会起作用
        【解决方案9】:

        如果你真的想立即终止一个进程,你可以发送一个 KILL 信号而不是一个 TERM 信号(后者是一个停止请求,第一个将立即生效,无需任何清理)。很容易做到:

        kill -KILL <pid>
        

        但请注意,根据您要停止的程序,其状态可能会在停止时严重损坏。您通常只想在正常终止不起作用时发送 KILL 信号。我想知道你试图解决的根本问题是什么,以及杀戮是否是正确的解决方案。

        【讨论】:

        【解决方案10】:

        我认为唯一的方法是停止打开端口的进程。

        【讨论】:

          【解决方案11】:

          杀死正在监听相关端口的进程。我相信 netstat 会向您显示进程 ID。

          【讨论】:

          • netstat -anp|grep 最后一列有进程
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多