【问题标题】:How can I kill whatever process is using port 8080 so that I can vagrant up? [closed]我怎样才能杀死正在使用端口 8080 的任何进程,以便我可以流浪?
【发布时间】:2014-08-14 18:20:08
【问题描述】:

在 MacOSX 上,我正在使用 Packer 构建一个 Vagrant 盒子,因此我需要不断地打开它并拆除它。我正在尝试“流浪”,并收到标准错误,因为端口正在使用中:

“Vagrant 无法转发此 VM 上的指定端口,因为它们会与已经在侦听这些端口的其他应用程序发生冲突。转发到 8080 的端口已在主机上使用。”

解决方案似乎很简单:我只需要确定保持端口 8080 处于打开状态的进程并终止该进程,对吗?没那么容易。


如果我运行命令:

nmap localhost -p 8080

我收到以下输出:

PORT     STATE SERVICE
8080/tcp open  http-proxy

如果我运行以下命令:

top -o prt

1360中使用的最高端口


如果我运行以下命令:

 netstat -tulpn | grep :8080

我收到:

netstat: n: unknown or uninstrumented protocol

如果我运行以下命令:

lsof -i :8080

我没有收到任何输出


如果我重新启动计算机,端口现在可用,我现在可以“流浪”。

我怎样才能杀死正在使用端口 8080 的任何进程,这样我就可以在不重新启动计算机的情况下进行流浪?

【问题讨论】:

    标签: macos networking vagrant


    【解决方案1】:

    这可能会有所帮助

    lsof -n -i4TCP:8080 
    

    PID 是输出中的第二个字段。

    或者试试:

    lsof -i -P
    

    【讨论】:

    • 感谢您的尝试,但我在问题中表示我没有收到 lsof 命令的输出。
    • 我添加了另一种可能性。
    • 您有 HP LaserJet 打印机吗? blog.hgomez.net/blog/2010/09/25/…
    • 谢谢马克!无论出于何种原因,重新启动我的计算机后, lsof 命令什么也没输出,现在它们是。现在,所有 3 个 lsof 命令都在工作,我可以识别进程 ID 并使用以下命令将其杀死: sudo kill -9 000 ... 其中 000 是进程 ID。该进程的名称是“VBoxHeadless”。如果我得到更多关于它以前为什么不工作的信息,我会报告回来。仅供参考:我没有连接打印机。
    • 尝试sudo lsof -n -i4TCP:8080 获取root 拥有的进程。
    【解决方案2】:

    快速快速的解决方案:

    lsof -n -i4TCP:8080

    PID 是第二个字段。然后,终止该进程:

    kill -9 PID

    速度较慢但永久的解决方案

    1. 转到/usr/local/bin/(可以在finder中使用command+shift+g)

    2. 创建一个名为stop 的文件。粘贴以下代码:

    #!/bin/bash
    touch temp.text
    lsof -n -i4TCP:$1 | awk '{print $2}' > temp.text
    pidToStop=`(sed '2q;d' temp.text)`
    > temp.text
    if [[ -n $pidToStop ]]
    then
    kill -9 $pidToStop
    echo "Congrates!! $1 is stopped."
    else
    echo "Sorry nothing running on above port"
    fi
    rm temp.text
    
    1. 保存此文件。
    2. 使文件可执行chmod 755 stop
    3. 现在,转到终端并写stop 8888(或任何端口)

    【讨论】:

    • 我尝试了永久解决方案,但在尝试运行脚本时出现“权限被拒绝”。通过第一次运行 chmod 755 stop 解决。
    【解决方案3】:

    如果以上接受的答案不起作用,请尝试以下解决方案。 您可以将其用于端口 8080 或任何其他端口。

    sudo lsof -i tcp:3000 
    

    将 3000 替换为您想要的任何端口。运行以下命令以终止该进程。

    sudo kill -9 PID
    

    PID 是您要杀死的进程 ID。

    下面是mac终端上的命令输出。

    【讨论】:

    • 我会先尝试常规杀戮(而不是 -9)。 -9 选项可能导致套接字未正确关闭。该进程可能会被终止,但另一个侦听器将在其位置分叉。
    【解决方案4】:

    使用以下命令:

    lsof -n -i4TCP:8080 | awk '{print$2}' | tail -1 | xargs kill -9

    8080端口的进程id会被kill -9强行查杀。

    【讨论】:

      【解决方案5】:
      sudo lsof -i:8080
      

      通过运行上面的命令,你可以看到正在运行的所有作业。

      kill -9 <PID Number>
      

      输入 PID(进程标识号),这将终止/终止实例。

      【讨论】:

        【解决方案6】:

        为此编写脚本:

        pid=$(lsof -ti tcp:8080)
        if [[ $pid ]]; then
          kill -9 $pid
        fi
        

        -t 参数使 lsof 的输出“简洁”,这意味着它只返回 PID。

        【讨论】:

        • 你也可以让它使用 $port
        • 终于有一个直接获取PID的方案了。谢谢,应该是这个帖子的正确答案
        【解决方案7】:

        我需要杀死不同端口上的进程,所以我创建了一个 bash 脚本:

        killPort() {
          PID=$(echo $(lsof -n -i4TCP:$1) | awk 'NR==1{print $11}')
          kill -9 $PID
        }
        

        只需将它添加到您的 .bashrc 并像这样运行它:

        killPort 8080
        

        你可以传递任何你想要的端口号

        【讨论】:

        • 非常简洁的解决方案。在 Big Sur 为我工作
        【解决方案8】:

        我需要运行这个命令

        sudo lsof -i :80 # checks port 8080
        

        然后我得到了

        COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
        acwebseca 312 root   36u  IPv4 0x34ae935da20560c1      0t0  TCP 192.168.1.3:50585->104.25.53.12:http (ESTABLISHED)
        

        显示哪个服务正在使用 PID

        ps -ef 312
        

        然后我得到了这个

          UID   PID  PPID   C STIME   TTY           TIME CMD
            0   312    58   0  9:32PM ??         0:02.70 /opt/cisco/anyconnect/bin/acwebsecagent -console
        

        卸载 cisco web security agent 运行

        sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh
        

        感谢:http://tobyaw.livejournal.com/315396.html

        【讨论】:

          【解决方案9】:

          它可以是 Cisco AnyConnect。 检查 /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist 是否存在。然后用launchctl卸载它并从/Library/LaunchDaemons中删除

          【讨论】:

            【解决方案10】:

            您还可以使用活动监视器来识别并退出使用端口的进程。

            【讨论】:

            • 我该怎么做?
            • 在 MacOSX 上:活动监视器 > 网络 > 按 PID 排序 > 找到您被阻止的端口(例如 8080、5000 等) > 单击左上角的“X”> 确认您要退出该进程。编辑运行/构建配置以确保只能创建单个服务器实例可能是个好主意,即在拆卸时释放您使用的端口。
            【解决方案11】:

            运行:nmap -p 8080 localhost(如果您的系统上还没有 nmap,请使用 MacPorts 或 Homebrew 安装它)

            本地主机 (127.0.0.1) 的 Nmap 扫描报告

            主机已启动(0.00034 秒延迟)。

            本地主机的其他地址(未扫描):::1

            港口国服务

            8080/tcp 打开 http-proxy

            运行:ps -ef | grep http-proxy

            UID PID PPID C STIME TTY TIME CMD

            640 99335 88310 0 12:26pm ttys002 0:00.01 grep http-proxy"

            运行:ps -ef 640(将 501 替换为您的 UID)

            /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/XPCServices/com.apple.PerformanceAnalysis.animationperfd.xpc/Contents/MacOS/com.apple.PerformanceAnalysis.animationperfd

            mac osx 上的 8080 端口被 installed with XCode SDK 使用了

            【讨论】:

              【解决方案12】:

              尝试网络统计

              netstat -vanp tcp | grep 3000
              

              如果您的 netstat 不支持 -p ,请使用 lsof

              sudo lsof -i tcp:3000 
              

              Centos 7 使用

              netstat -vanp --tcp | grep 3000
              

              【讨论】:

                【解决方案13】:

                参考@voutasaurus 的解决方案后。我编写了这个实用程序来简化杀死端口上正在运行的所有进程的过程。

                killProcessesUsing3000 () {
                  pid=$(lsof -ti :3000)  # The -t argument makes the output of lsof "terse" (Brief) which means that it only returns the PID.
                  # PID contains process processes that run on the 3000 port. In new lines if they are multiples
                  for num ($=pid) {
                    echo $num
                    kill -9 $num
                  }
                }
                
                #Alias
                alias kill3000="killProcessesUsing3000"
                

                【讨论】:

                  【解决方案14】:

                  对我来说这很有效

                  打开你的 mac 终端

                  kill $(lsof -t -i:8080)
                  

                  解释:

                  lsof -t 返回 PID 并将其传递给 kill。

                  【讨论】:

                    【解决方案15】:

                    我尝试了上述许多方法,但它们都不适合我。

                    几个小时后,我找到了这个班轮:

                    # kill 8080
                    alias nuke88="lsof -i tcp:8080 | grep LISTEN | awk '{print \$2}' | xargs kill"
                    
                    # kill 3000
                    alias nuke3k="lsof -i tcp:3000 | grep LISTEN | awk '{print \$2}' | xargs kill"
                    

                    【讨论】:

                      猜你喜欢
                      • 2017-01-15
                      • 1970-01-01
                      • 2021-03-04
                      • 2014-01-24
                      • 2011-08-20
                      • 2017-08-19
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-11-18
                      相关资源
                      最近更新 更多