Node.js Port 3000已经在使用但实际上并没有?

use*_*690 70 javascript port node.js npm

我一直在使用node.js项目几个星期,它一直很好用.通常我使用'npm start'来运行我的应用程序,并在浏览器上的localhost,端口3000上查看它.

今天,我在使用npm start时开始出现以下错误:

Server started on port 3000                                                                                                                                                                                         
Port 3000 is already in use 
Run Code Online (Sandbox Code Playgroud)

我检查了资源监视器,我没有在端口3000上运行其他进程.为什么我会收到此错误消息?

在我的app.js中,我有以下代码来设置端口......这是不正确的?它之前工作正常,所以我不确定我做错了什么.

// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
    console.log('Server started on port '+app.get('port'));
});
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

编辑:我已经尝试运行netstat和TCPView来检查使用该端口的进程,但没有使用该端口.我也试过重启我的笔记本电脑,但我仍然得到同样的错误.

Pen*_*Liu 228

或许你可以以此为参考。这个单一的命令行可以终止在给定端口上运行的进程。

npx kill-port 3000
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


杀死多个端口。

npx kill-port 3000 8080 4200
Run Code Online (Sandbox Code Playgroud)

  • `npx Kill-port 3000` 对我有用。谢谢@佩妮 (2认同)
  • 我不知道这个包存在。只有早上 7:30,我的一天已经结束了。 (2认同)

Ani*_*ngh 172

您可以搜索如何终止该进程.

对于Linux/Mac OS搜索(sudo)在终端中运行:

$ lsof -i tcp:3000
$ kill -9 PID
Run Code Online (Sandbox Code Playgroud)

在Windows上:

netstat -ano | findstr :3000
tskill typeyourPIDhere 
Run Code Online (Sandbox Code Playgroud)

改变(sudo) runtskillgit bash

  • 我已经在 Windows 上尝试了许多其他解决方案,但是这个解决方案发现了占用端口的奇怪进程。除了在 Windows 上工作外,还包括 linux 方法,因此赢得了赞誉。 (2认同)
  • tskill不在Windows上为我工作。taskkill / F / PID myPIDhere-此工作 (2认同)
  • 我只有`lsof`却什么也没有,但是有了`sudo lsof`我什么也没有,杀死这个进程解决了这个问题。 (2认同)
  • taskkill 在 git-bash 上对我不起作用,但 tskill 可以。谢谢。 (2认同)

小智 23

我也遇到了同样的问题。解决的最佳方法是(对于 Windows)

  1. 转到任务管理器

  2. 滚动并找到名为的任务进程。 Node.js:服务器端 JavaScript 添加图片以供参考

  3. 结束这个特殊的任务。

你去吧!现在执行npm start,它会像以前一样工作!


tec*_*ura 22

有时会发生这种情况,正如@sova提出的那样,有时EADDR会在我身上发生.通常,有一个终端窗口隐藏在仍在运行应用程序的后台.这对我来说也是对的.

它发生了,当你长时间打开终端,是的,你是对的,你已经停止了这个过程.但有时它并没有停留在后台.所以最好的解决方案是关闭终端并重新启动它.它将解决您的问题.因为在我的情况下,它的工作原理.

也,

sudo lsof -i:<PORT_NO>
Run Code Online (Sandbox Code Playgroud)

关闭当前时间的实例但无法在后台停止该过程.所以有一次,

sudo kill <PID>
Run Code Online (Sandbox Code Playgroud)

工作,但是当我们更新我们的代码并保存时,这个问题再次发生,就像Nodemon一样.

因此退出终端将解决问题.要么

  killall -9 node
Run Code Online (Sandbox Code Playgroud)

  • lsof 或 netstat 都没有返回任何内容,但似乎仍有一些进程在使用该端口。在“killall -9 node”之后,我能够在本地运行服务器。 (4认同)

Afe*_*een 19

杀死一个拥有 3000 端口的进程

首先,让我们看看如何杀死一个打开了端口的进程。

使用 lsof 命令,我们可以检索具有给定端口的 PID:

$ lsof -i :3000 -t
12345
Run Code Online (Sandbox Code Playgroud)

然后我们可以通过执行以下操作来终止这个进程:

$ kill 12345
Run Code Online (Sandbox Code Playgroud)

让我们把它变成一个单行:

lsof -i 3000 -t | xargs kill
Run Code Online (Sandbox Code Playgroud)

如果您使用环境变量来设置服务器端口,我们可以指定它而不是硬编码我们的值:

lsof -i ${PORT} -t | xargs kill
Run Code Online (Sandbox Code Playgroud)

最后,如果未设置环境变量,我们可以默认使用端口 3000:

lsof -i ${PORT:-3000} -t | xargs kill
Run Code Online (Sandbox Code Playgroud)

让 nodemon 执行钩子

Nodemon 允许您通过 nodemon.json 配置文件设置事件挂钩:

{
  "events": {
    "crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
  }
}
Run Code Online (Sandbox Code Playgroud)

这将导致 nodemon${PORT:-3000} -t | xargs在您的应用程序崩溃时执行 sh -c 'lsof -i : kill 命令,从而杀死它产生的保持端口打开的子进程。

或者你可以试试这个

fuser -k PORT-NO/tcp
Run Code Online (Sandbox Code Playgroud)

例如:

fuser -k 3000/tcp
Run Code Online (Sandbox Code Playgroud)

你也可以试试这个

fuser -n tcp -k PORT-NO
Run Code Online (Sandbox Code Playgroud)

例如:

fuser -n tcp -k 3000
Run Code Online (Sandbox Code Playgroud)


PRA*_*ESE 18

对于Windows,任务管理器肯定会显示正在运行的节点进程.尝试杀死进程,它将解决问题.


Mah*_*yar 13

我有同样的问题.(以下步骤在Windows 10上正常工作):

  1. 打开任务管理器(按Ctrl+ Alt+ Delete)
  2. 选择'进程标签'
  3. 搜索'Node.js:服务器端JavaScript'
  4. 选择它并单击"结束任务"按钮

现在你可以跑了npm start.

希望它能帮到你.


May*_*yur 13

自从找到解决方案后,我今天遇到了同样的问题。

问题是因为即使重新启动,节点服务也在后台运行nodemon

我已经浏览了很多答案,但都带有多个命令。我为我的案例找到了一个简单的命令

sudo pkill node
Run Code Online (Sandbox Code Playgroud)

这将终止节点中所有正在运行的进程,并且您nodemon将开始按预期工作。


Sal*_*zid 11

 killall -9 node
Run Code Online (Sandbox Code Playgroud)

当您进行远程开发时,上述命令可以退出 vs 代码 ssh 连接并终止所有可能导致问题的节点进程,特别是如果您在生产中使用 node 有一些应用程序,则有一种更好的方法可以通过使用 netstat 来获取所有节点进程使用他们正在使用的端口,然后通过 PID 杀死你想要的唯一一个

 netstat -lntp | grep node
Run Code Online (Sandbox Code Playgroud)

您将获得所有节点进程

 tcp6  0      0 :::5744    :::*    LISTEN     3864/node
Run Code Online (Sandbox Code Playgroud)

然后当您获得 PID (3864) 时,只需通过 PID 终止进程

   kill -9 PID
Run Code Online (Sandbox Code Playgroud)

或者

   kill -HUP PID 
Run Code Online (Sandbox Code Playgroud)


ayg*_*maz 9

我在NodeJS上使用带有nodemon 的快速服务器。我收到以下消息,似乎是一个错误:

$ node ./bin/www
Port 3000 is already in use
Run Code Online (Sandbox Code Playgroud)

有一个通用的解决方案,如果您终止所有节点服务器连接,您可以在 package.json 文件中添加以下代码:

"scripts": {
    "start": "node ./bin/www",
    "stop": "taskkill -f -im node.exe"
},
Run Code Online (Sandbox Code Playgroud)

此外,我在 Win 10 x64 上找到了几个解决方案 windows command 和 bash。

我所有的笔记都在这里:


# 终止所有 NodeJS 服务器连接

$ taskkill -f -im node.exe
SUCCESS: The process "node.exe" with PID 14380 has been terminated.
SUCCESS: The process "node.exe" with PID 18364 has been terminated.
SUCCESS: The process "node.exe" with PID 18656 has been terminated.
Run Code Online (Sandbox Code Playgroud)

# 示例:打开 Windows 任务管理器并查看 Windows 上的“node.exe”PID 编号

>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano
Run Code Online (Sandbox Code Playgroud)

# 通过端口号杀死 Windows 中的进程(示例)

求助:

$ taskkill /?
$ tskill /?
Run Code Online (Sandbox Code Playgroud)

代码 1:

$ taskkill -pid 14228
ERROR: The process with PID 14228 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).
Run Code Online (Sandbox Code Playgroud)

代码 2:

$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.
Run Code Online (Sandbox Code Playgroud)

代码 3:

$ tskill 14228
Run Code Online (Sandbox Code Playgroud)

# 查看特定端口的命令行

在 cmd 中:

$ netstat -ano | find "14228"
Run Code Online (Sandbox Code Playgroud)

在 bash 中:

$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228
Run Code Online (Sandbox Code Playgroud)

# 使用“tasklist”命令查找node.exe

在 cmd 中:

$ tasklist | find "node"
Run Code Online (Sandbox Code Playgroud)

在 bash 中:

$ tasklist | grep node
$ tasklist | grep node.exe
node.exe                     14228 Console                    2     48,156 K
node.exe                     15236 Console                    2     24,776 K
node.exe                     19364 Console                    2     24,428 K
Run Code Online (Sandbox Code Playgroud)


小智 8

在此输入图像描述

打开命令提示符并首先运行以下命令:

netstat -ano | findstr :7001
Run Code Online (Sandbox Code Playgroud)

然后运行这个命令:

taskkill /PID 2820 /F
Run Code Online (Sandbox Code Playgroud)


obr*_*enk 7

这是一个老问题,但似乎没有一个回答者真正读过它。我遇到了同样的问题,问题是 Windows 有时会保留端口块并阻止您使用它们。该端口不会通过 netstat 或任何其他工具显示。你可以在这里读到它

本质上,你可以告诉 Windows 让你的端口保持不变:

netsh int ipv4 add excludedportrange tcp startport=3000 numberofports=1 store=persistent
Run Code Online (Sandbox Code Playgroud)

  • 多谢。这解决了我的问题。在过去的几个小时里我一直在努力寻找解决方案。 (2认同)
  • 在尝试了所有以前的解决方案之后,我来到了这里。端口 3000 上没有运行可见的进程。这个解决方案对我有用。谢谢。 (2认同)

sov*_*ova 6

这有时会发生在我身上,正在使用 EADDR。通常有一个隐藏在后台的终端窗口仍在运行应用程序。您可以在终端窗口中使用 ctrl+C 停止进程。

或者,您可能由于复制/意大利面而多次监听端口 =)

  • 谢谢!我设法弄清楚了,我多次监听端口,复制/意大利面意外!如果您可以编辑答案并添加该部分,我会标记它。再次谢谢你! (2认同)

Jam*_*ith 6

我见过同样的事情,并尝试了以上所有建议,但均未成功。以下是为我解决此问题的步骤:-关闭wifi-npm启动(应该可以)-开启wifi

我不确定是什么根本问题,但是这为我解决了。


小智 6

当命令中没有列出任务时会发生这种情况

lsof -i:3000
Run Code Online (Sandbox Code Playgroud)

但仍然会出现错误

Error: listen EADDRINUSE: address already in use 0.0.0.0:3000
Run Code Online (Sandbox Code Playgroud)

原因之一是在 Nginx conf.d 中检查没有任何配置正在侦听端口 3000


小智 5

打开任务管理器(按 Ctrl+Alt+Del 选择“进程选项卡”搜索“Node.js:服务器端 JavaScript”选择它并单击“结束任务”按钮


tow*_*ith 5

port problem我最近在win10上遇到一个奇怪的问题,无法启动服务器进程监听8080端口,我将其更改为18080,然后就可以了,但是过了一段时间,同样的问题又出现了。但我找不到任何进程使用该端口,我已经尝试过currpotsnetstat但它们都不起作用,我尝试通过以下方式打开端口

python -m http.server 18080
python -m http.server 18081
python -m http.server 18082
python -m http.server 18083
python -m http.server 18084
...
Run Code Online (Sandbox Code Playgroud)

,大多数都显示类似的消息“端口已在使用中”,幸运的是,我搜索并找到了原因。经过

netsh interface ipv4 show excludedportrange protocol=tcp
Run Code Online (Sandbox Code Playgroud)

可以看到有些端口被排除使用,通过这些端口没有打开和监听。并由

net stop winnat
Run Code Online (Sandbox Code Playgroud)

大多数排除的端口被释放,这些端口就可以使用了。


归档时间:

查看次数:

107644 次

最近记录:

5 年,9 月 前