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

问题描述 投票:1419回答:30

如何查找(和终止)侦听/使用我的tcp端口的进程?我在mac os x上。

有时,在崩溃或一些错误后,我的rails应用程序锁定端口3000.我找不到使用ps -ef ...

做的时候

rails server

我明白了

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

2014年更新:

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

macos process
30个回答
2356
投票
  1. 你可以尝试netstat netstat -vanp tcp | grep 3000
  2. 对于macOS El Capitan和更新版(或者如果你的netstat不支持-p),请使用lsof sudo lsof -i tcp:3000
  3. 对于Centos 7使用 netstat -vanp --tcp | grep 3000

27
投票

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

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

lsof的Terse选项只返回PID。


27
投票

杀死端口进程的方法之一是使用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

25
投票

要查看阻止端口的进程:

netstat -vanp tcp | grep 3000

要杀死阻塞端口的进程:

kill $(lsof -t -i :3000)


23
投票

找到开放的连接

lsof -i -P | grep -i“听”

杀死进程ID

杀死-9'PID'


21
投票

找到PID并终止进程。

lsof -ti:3000 | xargs kill

18
投票

找到并杀死:

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

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

14
投票

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

最佳

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 

14
投票

最简单的解决方案:使用单行命令终止多个端口。

kill $(lsof -t -i:3000,3001) // 3000 and 3001 are the ports to be freed

lsof -t -i:3000

82500

lsof -t -i:3001

82499

lsof -t -i:3001,3000

82499 82500

杀$(lsof -t -i:3001,3000)

在单个命令中终止进程82499和82500。

lsof -t -i:3000

lsof -t -i:3001

您可以在package.json脚本中使用它

"scripts": { "start": "kill $(lsof -t -i:3000,3001) && npm start" }


5
投票

添加到~/.bash_profile

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

然后source ~/.bash_profile并运行

killTcpListen 8080


5
投票

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

$ fkill :3000

1500
投票

找:

[sudo] lsof -i :3000

杀:

kill -9 <PID>

3
投票

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

3
投票

我为此做了一个小功能,将它添加到你的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)


2
投票

lsof -i tcp:port_number - 将列出在该端口上运行的进程

kill -9 PID - 将杀死这个过程

在你的情况下,它会

来自终端的lsof -i tcp:3000找到进程的PID

kill -9 PID


1
投票

你应该尝试这个,这种技术是OS独立的。

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

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


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

0
投票

如果你想要一个免费的代码方式 - 打开活动管理器和强制kill节点:)


0
投票

使用以下命令终止端口3000 kill $(lsof -t -i:3000)上的进程


0
投票

你可以试试这个

netstat -vanp tcp | grep 3000

-1
投票

在mac OS中

kill -9 $(lsof -i TCP:3000 | grep LISTEN | awk '{print $2}')


-2
投票

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


150
投票

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

跑:

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

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

ps ax | grep <PID>

最后,“用它来做”:

kill -QUIT <PID>

-7
投票

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

$ killall -9 ruby

122
投票

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

lsof -ti:3000 | xargs kill

-t标志从lsof输出中删除除PID之外的所有内容,从而可以轻松地将其删除。


96
投票

你可以使用lsof -i:3000

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


63
投票

这个命令行很容易记住:

npx kill-port 3000

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

npx fkill-cli


PS:他们使用第三方javascript包。 npx内置Node.js.

资料来源:tweet | github


56
投票

在你的.bash_profile中,为terminate 3000过程创建一个快捷方式:

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

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


56
投票

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

lsof -n -i4TCP:3000 

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

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

kill -9 "PID"

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

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


34
投票
lsof -P | grep ':3000' | awk '{print $2}'

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

© www.soinside.com 2019 - 2024. All rights reserved.