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

时间:2010-10-04 12:19:16

标签: macos process

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

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

做的时候

rails server

我得到了

  

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

2014年更新:

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

39 个答案:

答案 0 :(得分:2297)

  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
    

答案 1 :(得分:1478)

查找

[sudo] lsof -i :3000

杀:

kill -9 <PID>

答案 2 :(得分:144)

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

执行命令

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

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

ps ax | grep <PID>

最后,“忍受它”:

kill -QUIT <PID>

答案 3 :(得分:120)

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

lsof -ti:3000 | xargs kill

-t标志从lsof输出中删除除PID之外的所有内容,从而轻松杀死它。

答案 4 :(得分:94)

您可以使用lsof -i:3000

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

答案 5 :(得分:55)

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

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

然后,如果被阻止,请致电$terminate

答案 6 :(得分:55)

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

lsof -n -i4TCP:3000 

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

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

kill -9 "PID"

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

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

答案 7 :(得分:55)

这个简单的命令行很容易记住:

coef(fit, s = "lambda.min") #3 x 1 sparse Matrix of class "dgCMatrix" # 1 #(Intercept) 2.439590e+01 #x1 1.451704e+01 #x2 5.723395e-16

使用搜索功能更强大的工具:

npx kill-port 3000


PS:他们使用第三方javascript程序包。 npx fkill-cli随Node.js内置。

来源:tweet | github

答案 8 :(得分:34)

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

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

答案 9 :(得分:31)

杀死多个端口。

$ npx kill-port 3000 8080 8081

Process on port 3000 killed
Process on port 8080 killed
Process on port 8081 killed

希望有帮助!

答案 10 :(得分:27)

One of the ways to kill a process on a port is to use the python library: freeport (https://pypi.python.org/pypi/freeport/0.1.9) . Once installed, simply:

<?php
function hagel_script_enqueue() {
//css
wp_enqueue_style('bootstrap', get_template_directory_uri() . '/css/bootstrap.min.css', array(), '3.3.4', 'all');
wp_enqueue_style('customstyle', get_template_directory_uri() . '/css/hagel.css', array(), '1.0.0', 'all');
//js
wp_enqueue_script('jquery');
wp_enqueue_script('bootstrapjs', get_template_directory_uri() . '/js/bootstrap.min.js', array(), '3.3.4', true);
wp_enqueue_script('customjs', get_template_directory_uri() . '/js/hagel.js', array(), '1.0.0', true);
}

add_action( 'wp_enqueue_scripts', 'hagel_script_enqueue');

答案 11 :(得分:27)

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

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

lsof的Terse选项只返回PID。

答案 12 :(得分:22)

找到开放式连接

  

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

按进程ID

终止
  

kill -9'PID'

答案 13 :(得分:21)

找到PID并终止进程。

lsof -ti:3000 | xargs kill

答案 14 :(得分:17)

发现并杀死:

此单个命令行很简单并且可以正常运行。

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

答案 15 :(得分:13)

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

热门

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 

答案 16 :(得分:11)

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

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" }

答案 17 :(得分:8)

这两个命令将帮助您查找并杀死服务器进程

  
      
  1. lsof -wni tcp:3000
  2.   
  3. 杀死-9 pid
  4.   

答案 18 :(得分:5)

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

$ fkill :3000

答案 19 :(得分:5)

添加到~/.bash_profile

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

然后source ~/.bash_profile并运行

killTcpListen 8080

答案 20 :(得分:4)

kill -9 $(lsof -ti:3000)

始终在 macOS 上为我工作。

如果您正在处理 node.js 项目,则可以将其添加到 package.json 脚本中,例如;

"scripts": {
    ...
    "killme": "kill -9 $(lsof -ti:3000)",
    ...
  },

然后

npm run killme

--

此外,如果您想为 macOS 添加系统范围的别名,请按照以下步骤操作;

  1. 导航到您的主目录:

    cd ~

  2. 使用 nano 或 vim 打开 .bash_profile 或 zsh 配置文件:

    vi .bash_profile

  3. 添加别名(按 i):

    别名 killme="kill -9 $(lsof -ti:3000)"

  4. 保存文件

  5. 重启终端

输入 killme 到终端

当然,您可以将端口 3000 更改为您想要的。

答案 21 :(得分:3)

I made a little function for this, add it to your rc file (.bashrc, .zshrc or whatever)

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
}

then you can just type kill-by-port 3000 to kill your rails server (substituting 3000 for whatever port it's running on)

failing that, you could always just type kill -9 $(cat tmp/pids/server.pid) from the rails root directory

答案 22 :(得分: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

答案 23 :(得分:2)

要关闭 mac 上的 3000 端口,请运行以下命令

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)

答案 24 :(得分:2)

我最喜欢的单线: sudo kill `sudo lsof -t -i:3000`

答案 25 :(得分:1)

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

kill -9 PID-将终止进程

在您的情况下,它将是

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

kill -9 PID

答案 26 :(得分:1)

为我工作以终止节点(Mac OS Catalina)

killall -9 node

答案 27 :(得分:1)

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

$subcat = mysqli_real_escape_string($con, $_POST[ 'subcat' ]);

$query = "INSERT into subcategory (scatname) VALUES ('$subcat')";
$result = mysqli_query( $con, $query );

用法:

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]

答案 28 :(得分:1)

您应该尝试此方法,该技术与操作系统无关。

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

我认为这是简单的方法。

答案 29 :(得分:0)

您可以尝试

Download finished
Upload finished
Promise resolved
Upload error
Error: write after end
...

答案 30 :(得分:0)

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

答案 31 :(得分:0)

我用这个:

cat tmp/pids/server.pid | pbcopy

然后 kill -9 'paste'

答案 32 :(得分:0)

如果您想要一种免代码的方式-打开活动管理器并强制杀死节点:)

答案 33 :(得分:0)

我使用:

lsof -wni tcp:3000

获取PID,并:

kill -9 <PID>

答案 34 :(得分:0)

如果您正在使用 Zsh,并且不想记住多管道命令,只需将下一行代码添加到 ~/.zshrc

function murder() {
    lsof -nti:$1 | xargs kill -9
}

然后任何时候您需要杀死特定端口上的进程,只需使用:

murder 3000

P.S 随意重命名命令并改进它:)

答案 35 :(得分:0)

终端o/p的步骤说明

我有 Macbook Pro (Catalina),1 天后我在运行 Django 服务器(默认运行在端口 8000)时发现了以下问题:

<块引用>

python manage.py runserver 3000

(venv) Rishikeshs-MacBook-Pro:learn-django hygull$ python manage.py runserver 3000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
July 27, 2021 - 23:54:05
Django version 3.2.3, using settings 'automated_classification.settings'
Starting development server at http://127.0.0.1:3000/
Quit the server with CONTROL-C.
Error: That port is already in use.

我尝试使用所提供并执行的,但仅运行其中 1 个并不能解决我的问题(我知道还有其他一些答案,但不知何故我解决了我的问题)。例如。我试图重新运行上面的命令,但这也不起作用(进程仍然处于活动状态)。

所以我最终按照他和其他人的建议,使用了@Cris 的答案,另外还有 1 个步骤。所以我的答案是将他们的命令与终端输出一起使用,让您更清楚地执行操作。

<块引用>

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

(venv) Rishikeshs-MacBook-Pro:learn-django hygull$ lsof -P | grep ':3000' | awk '{print $2}' 
36239
38272  

现在我得到了要杀死的 id 列表,让我们开始吧。

<块引用>

kill -9

(venv) Rishikeshs-MacBook-Pro:learn-django hygull$ kill -9 36239
(venv) Rishikeshs-MacBook-Pro:learn-django hygull$ kill -9 36239
-bash: kill: (36239) - No such process
(venv) Rishikeshs-MacBook-Pro:learn-django hygull$ kill -9 38272
(venv) Rishikeshs-MacBook-Pro:learn-django hygull$ kill -9 38272
-bash: kill: (38272) - No such process

现在,让我们尝试重新运行命令。

<块引用>

python manage.py runserver 3000

(venv) Rishikeshs-MacBook-Pro:learn-django hygull$ python manage.py runserver 3000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
July 27, 2021 - 23:55:53
Django version 3.2.3, using settings 'project.settings'
Starting development server at http://127.0.0.1:3000/
Quit the server with CONTROL-C.

最终

<块引用>

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

您可以将上述 2 个步骤合并在 1 行中并执行以终止侦听端口 3000 的进程。

答案 36 :(得分:-1)

在Mac OS中

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

答案 37 :(得分:-2)

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

答案 38 :(得分:-7)

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

$ killall -9 ruby