首页 文章

在Mac上查找(并终止)进程锁定端口3000

提问于
浏览
1228

如何查找侦听/使用我的tcp端口的进程?我在mac os x上 .

有时,在崩溃或一些错误后,我的rails应用程序锁定端口3000.我找不到它使用ps -ef ...我怎么找到愚蠢的东西并杀死它,残忍......?

做的时候

rails server

我明白了

地址已在使用中 - bind(2)(Errno :: EADDRINUSE)

2014年更新:

要完成以下一些答案:执行kill命令后,可能需要删除pid文件 rm ~/mypath/myrailsapp/tmp/pids/server.pid

28 回答

  • 0

    你可以使用命令

    lsof -h
    

    使用此命令查找端口是

    -i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
    

    在你的情况下输入

    lsof -i :3000
    
  • -1

    这是一个帮助程序bash函数,用于按名称或端口终止多个进程

    fkill() {
      for i in $@;do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
      else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
      xargs -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
    }
    

    用法:

    $ fkill [process name] [process port]
    

    例:

    $ fkill someapp :8080 node :3333 :9000
    
  • 3

    添加到 ~/.bash_profile

    function killTcpListen () {
      kill -QUIT $(sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
    }
    

    然后 source ~/.bash_profile 并运行

    killTcpListen 8080

  • 1

    您还可以更改服务器端口(config / puma.rb)第12行上的配置 .

    $ port ENV.fetch(“PORT”){3000}

    $ port ENV.fetch(“PORT”){3001}

    或您认为合适的任何特定港口 . 这避免了需要对进程进行清道夫搜寻 . 你总是可以重启你的电脑 . 当你在另一个端口上启动服务器时,它通常会终止你打开的第一个服务器 .

  • -5

    使用端口3000提取进程的PID并使其终止的单行程序 .

    lsof -ti:3000 | xargs kill
    

    -t标志从lsof输出中删除除PID之外的所有内容,从而很容易将其删除 .

  • 26

    你可以使用 lsof -i:3000 .

    那就是“列出打开文件” . 这将为您提供进程列表以及它们使用的文件和端口 .

  • 34

    在OS-X El Captain上的命令行执行:

    kill -kill `lsof -t -i tcp:3000`
    

    lsof的Terse选项仅返回PID .

  • 27

    步骤1:查找正在运行的服务器: ps aux | grep puma 步骤2:杀死那些服务器Kill -9 [服务器号]

  • 0

    您应该使用终端尝试此代码:

    $ killall -9 ruby
    
  • 88

    我为此做了一个小功能,将它添加到你的rc文件( .bashrc.zshrc 或其他)

    function kill-by-port {
      if [ "$1" != "" ]
      then
        kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
      else
        echo "Missing argument! Usage: kill-by-port $PORT"
      fi
    }
    

    然后你可以输入 kill-by-port 3000 来杀死你的rails服务器(用3000代替它运行的任何端口)

    如果失败了,你总是可以从rails根目录中输入 kill -9 $(cat tmp/pids/server.pid)

  • 52
    lsof -P | grep ':3000' | awk '{print $2}'
    

    这将为您提供在MacOS上测试的pid .

  • 3

    查找并杀死:

    这个单一的命令行很简单,工作正常 .

    kill -9 $(lsof -ti tcp:3000)
    
  • 50

    要强制终止类似的进程,请使用以下命令

    lsof -n -i4TCP:3000
    

    其中3000是进程运行的端口号

    这将返回进程ID(PID)并运行

    kill -9 "PID"
    

    将PID替换为运行第一个命令后得到的数字

    For Instance, if I want kill the process running on port 8080

  • 1308

    这个命令行很容易记住:

    npx kill-port 3000

    对于搜索功能更强大的工具:

    npx fkill-cli


    PS:他们使用第三方javascript包

    资料来源:tweet | github

  • 16

    .bash_profile 中,为 terminate 3000流程创建快捷方式:

    terminate(){
      lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
    }
    

    然后,如果它被阻止,请调用 $terminate .

  • 5

    杀死端口进程的方法之一是使用python库:freeport(https://pypi.python.org/pypi/freeport/0.1.9) . 安装完成后,只需:

    # install freeport
    pip install freeport
    
    # Once freeport is installed, use it as follows
    $ freeport 3000
    Port 3000 is free. Process 16130 killed successfully
    
  • 117

    如果以上工作没有尝试:

    lsof -n -i4TCP:3000
    
  • 1998

    实现这一目标的可能方法:

    top

    top命令是查看系统资源使用情况的传统方法,并查看占用最多系统资源的进程 . Top显示进程列表,其中顶部使用最多的CPU .

    ps

    ps命令列出正在运行的进程 . 以下命令列出了系统上运行的所有进程:

    ps -A
    

    您还可以通过grep管道输出以搜索特定进程,而无需使用任何其他命令 . 以下命令将搜索Firefox进程:

    ps -A | grep firefox
    

    将信号传递给程序的最常用方法是使用kill命令 .

    kill PID_of_target_process
    

    lsof

    所有打开文件的列表以及打开它们的进程 .

    lsof -i -P | grep -i "listen"
    kill -9 PID
    

    要么

    lsof -i tcp:3000
    
  • 1

    尝试使用Ctrl C而不是Ctrl Z来终止以前运行的应用程序 .

    否则,您可以通过运行 [sudo] lsof -i :3000 找到在端口3000上运行的进程

    然后杀死进程 kill -9 <PID>

  • 5
    • 你可以试试 netstat
    netstat -vanp tcp | grep 3000
    
    • 对于 macOS El Capitan 和更新版(或者如果您的netstat不支持 -p ),请使用 lsof
    sudo lsof -i tcp:3000
    
    • 使用 Centos 7
    netstat -vanp --tcp | grep 3000
    
  • 0

    找:

    [sudo] lsof -i :3000
    

    杀:

    kill -9 <PID>
    
  • 22

    TL; DR:

    lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
    

    如果您处于使用该端口的客户端和服务器的情况,例如:

    $ lsof -i tcp:3000
    COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
    node       2043 benjiegillam   21u  IPv4 0xb1b4330c68e5ad61      0t0  TCP localhost:3000->localhost:52557 (ESTABLISHED)
    node       2043 benjiegillam   22u  IPv4 0xb1b4330c8d393021      0t0  TCP localhost:3000->localhost:52344 (ESTABLISHED)
    node       2043 benjiegillam   25u  IPv4 0xb1b4330c8eaf16c1      0t0  TCP localhost:3000 (LISTEN)
    Google    99004 benjiegillam  125u  IPv4 0xb1b4330c8bb05021      0t0  TCP localhost:52557->localhost:3000 (ESTABLISHED)
    Google    99004 benjiegillam  216u  IPv4 0xb1b4330c8e5ea6c1      0t0  TCP localhost:52344->localhost:3000 (ESTABLISHED)
    

    然后你可能不想杀死两者 .

    在这种情况下,您可以使用 -sTCP:LISTEN 仅显示正在侦听的进程的pid . 将其与 -t 简洁格式相结合,您可以自动终止该过程:

    lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
    
  • 97

    上面没有任何东西适合我 . 有我经验的任何人都可以尝试以下(为我工作):

    跑:

    lsof -i :3000 (where 3000 is your current port in use)
    

    然后检查报告的PID的状态:

    ps ax | grep <PID>
    

    最后,“用它来做”:

    kill -QUIT <PID>
    
  • 3

    Find the open connection > lsof -i -P | grep -i“听”

    Kill by process ID

    kill -9'PID'

  • 12

    你应该试试这个,这种技术是OS Independent .

    在您的应用程序旁边有一个名为tmp的文件夹,里面有另一个名为pids的文件夹 . 该文件包含服务器pid文件 . 只需删除该文件即可 . 端口自动杀死自己 .

    我认为这是一种简单的方法 .

  • 9

    使用sindresorhusfkill工具,您可以这样做:

    $ fkill :3000
    
  • 1

    找到PID并终止进程 .

    lsof -ti:3000 | xargs kill
    
  • 24

    要查看阻止端口的进程:

    netstat -vanp tcp | grep 3000

    要杀死阻塞端口的进程:

    kill $(lsof -t -i :3000)

相关问题