提问人:Skawful 提问时间:11/2/2010 更新时间:9/6/2023 访问量:1533301
节点/快速:EADDRINUSE,地址已在使用 - 终止服务器
Node / Express: EADDRINUSE, Address already in use - Kill server
问:
我有一个简单的服务器使用 connect 在 node.js 中运行:
var server = require('connect').createServer();
//actions...
server.listen(3000);
在我的代码中,我有实际的处理程序,但这是基本思想。我不断遇到的问题是
EADDRINUSE, Address already in use
在之前崩溃或错误后再次运行应用程序时,我收到此错误。由于我没有打开终端的新实例,因此我用 关闭了该过程。ctr + z
我相当确定我所要做的就是关闭服务器或连接。我试着打电话,但没有运气。server.close()
process.on('exit', ...);
答:
Linux操作系统
运行并确定节点进程的 PID。ps
然后,运行sudo kill PID
窗户
使用 tasklist 显示正在运行的进程列表:
tasklist /O
然后,像这样杀死节点进程(使用从命令中获取的 PID):tasklist
taskkill /pid PID
评论
taskkill //IM node.exe
process.on('exit', ..)
如果进程崩溃或终止,则不会调用。它仅在事件循环结束时调用,并且由于某种程度上结束了事件循环(它仍然必须等待当前在这里和那里运行的堆栈),因此将其放在退出事件中是没有意义的......server.close()
崩溃时,执行和终止执行process.on('uncaughtException', ..)
process.on('SIGTERM', ..)
话虽如此,SIGTERM(默认终止信号)允许应用程序清理,而 SIGKILL(立即终止)不会让应用程序执行任何操作。
评论
您也可以转到命令行路由:
ps aux | grep node
获取进程 ID。
然后:
kill -9 PID
在 kill 时执行 -9 会发送一个 SIGKILL(而不是 SIGTERM)。 SIGTERM 有时被节点忽略了。
评论
ps aux | grep node
什么也没显示;仍然失败:3 月 14 日 21:19:30 - socket.io 就绪 - 接受连接 现在可以启动服务器:EADDRINUSE,地址已在使用中textareaserver --editor-cmd='gvim -f'
killall -9 node
lsof -n -i4TCP:8000 | grep LISTEN | tr -s ' ' | cut -f 2 -d ' ' | xargs kill -9
kill
killall
我在运行 win8 的笔记本电脑上击中了这个。这奏效了。
以“管理员”身份运行 cmd.exe:
C:\Windows\System32>taskkill /F /IM node.exe
SUCCESS: The process "node.exe" with PID 11008 has been terminated.
评论
taskkill /F /IM node.exe
对我来说,就像来自任何目录的 Windows 上的魅力一样:-)感谢您的分享!
您可以使用热节点来防止服务器崩溃/运行时错误。每当节点程序[源代码] / 进程[正在运行的节点程序] 发生更改时,Hot-node 会自动为您重新启动 nodejs 应用程序。
使用 npm 使用 global 选项安装 hot-node:
npm install -g 热节点
评论
我曾经遇到过这个错误,并在这里采用了许多方法。
我的问题是我有两个app.listen(3000;
在同一个app.js脚本中调用。第一个 app.listen() 成功,第二个 app.listen() 抛出错误。
我遇到的另一个帮助我调试的有用命令是它将杀死您可能已启动的任何流氓进程(某些进程可能会重新启动,例如,如果使用 forever.js 运行,但它对我有用)。sudo fuser -k 3000/tcp
评论
npm start
任务管理器 (ctrl+alt+del) ->
“进程”选项卡 ->
选择“节点.exe”进程并点击“结束进程”
评论
node
node
仅供参考,您可以在一个命令中终止该进程。这可以用于所有其他端口,如 8000、8080 或 9000,这些端口通常用于开发。sudo fuser -k 3000/tcp
我找到了这个解决方案,试试吧
授予使用权限sudo
sudo pkill node
评论
ps aux | grep node
在适当尊重表格中所有答案的情况下,我想补充一点。
我发现当我使用 Ctrl + Z 错误地终止节点应用程序时,下次我尝试打开它时会出现相同的错误 EADDRINUSE。
当我使用 Ctrl + C 终止节点应用程序时,下次打开它时,它顺利完成。
将端口号更改为错误端口号以外的端口号解决了该问题。
评论
fg
首先,您想知道哪个进程正在使用port 3000
sudo lsof -i :3000
这将列出在此端口上侦听的所有 PID,一旦您拥有 PID,您可以使用以下命令终止它:
kill -9 <PID>
其中,将上一个命令输出替换为进程 ID 或进程 ID 列表。<PID>
评论
ps aux | grep node
sudo
sudo
killall -9 {COMMAND}
killall -9 node
PowerShell 用户:
任务终止 /IM 节点.exe /F
以防万一,检查您是否错误地多次添加了此行
app.listen(3000, function() {
console.log('listening on 3000')
});
上面的代码是用于快速的,但只需检查您是否尝试在代码中使用同一端口两次即可。
使用以下命令检查 PID,即在端口 3000 上运行的进程的 ID:
lsof -i tcp:3000
它将输出如下内容:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 5805 xyz 12u IPv6 63135 0t0 TCP *:3000 (LISTEN)
现在使用以下命令终止进程:
kill -9 5805
评论
kill -9
kill PID
kill -2 PID
kill -15 PID
这是一个单行(将 3000 替换为端口或配置变量):
kill $(lsof -t -i:3000)
评论
kill $(lsof -t -i:8080)
使用 Mongo 运行 Node.js Express 应用程序时为我工作。
首先找出正在运行的内容:
sudo lsof -nP -i4TCP:3000 | grep LISTEN
你会得到类似的东西:
php-fpm 110 root 6u IPv4 0x110e2ba1cc64b26d 0t0 TCP 127.0.0.1:3000 (LISTEN)
php-fpm 274 _www 0u IPv4 0x110e2ba1cc64b26d 0t0 TCP 127.0.0.1:3000 (LISTEN)
php-fpm 275 _www 0u IPv4 0x110e2ba1cc64b26d 0t0 TCP 127.0.0.1:3000 (LISTEN)
然后,您可以按如下方式终止该过程:
sudo kill 110
然后,您将能够在不出现侦听EADDRINUSE :::3000错误的情况下运行
评论
对于Windows,打开任务管理器并查找node.exe进程。用结束任务杀死他们所有人。
评论
对于像我这样的 Visual Studio 菜鸟
您可能正在其他终端中运行该进程!
在 Visual Studio 中关闭终端后,终端就会消失。
我手动创建了一个新的,以为前一个被销毁了。实际上,每次我单击“新建终端”时,我实际上都在以前的终端之上创建一个新终端。
所以我找到了第一个终端,然后......瞧,我在那里运行服务器。
您可能会遇到这样的情况,即即使杀死线程或进程实际上也不会终止应用程序(这种情况在 Linux 和 Windows 上偶尔发生)。有时,您可能已经有一个实例正在运行,但您没有关闭。
由于这些情况,我更愿意在我的:package.json
"scripts": {
"stop-win": "Taskkill /IM node.exe /F",
"stop-linux": "killall node"
},
然后,我可以使用以下命令来称呼它们:
npm run stop-win
npm run stop-Linux
如果需要,您可以更高级,并使用参数标志创建这些 BIN 命令。您还可以将这些命令添加为要在 try-catch 子句中执行的命令。
ps aux | grep node
kill -9 [PID] (provided by above command)
描述:
- ps 会给出进程状态,aux 提供 a:所有用户进程,u:用户自己的进程,x:未附加到终端的所有其他进程的列表。
- 管道符号: |将传递 PS AUX 的结果以进一步操作。
- grep 将从 PS aux 提供的列表中搜索提供的字符串(在我们的例子中为 node)。
评论
kill -9
kill PID
kill -2 PID
kill -15 PID
UI解决方案 对于Windows用户:我发现顶级答案对我不起作用,它们似乎是Mac或Linux用户的命令。我找到了一个简单的解决方案,不需要任何命令来记住:打开任务管理器(ctrl + shift + esc)。查看正在运行的后台进程。查找任何 Node.js 并结束任务。
在我这样做之后,问题对我来说就消失了。如其他答案所述,由于之前遇到错误并且未调用常规退出/清理功能,因此后台进程仍在运行,因此杀死它们的一种方法是在任务管理器中找到该进程并在那里杀死它。如果从终端/powerShell 运行该进程,通常可以使用 ctrl+c 来终止它。
在Windows用户中:打开文件,它工作正常。task manager
end task
nodejs.exe
在我的回答中重写@Gerard的评论:
尝试或是否在类 UNIX 操作系统上。
pkill nodejs
pkill node
这将终止运行在任何端口上运行的节点服务器的进程。 为我工作。
bash$ sudo netstat -ltnp | grep -w ':3000'
- tcp6 0 0 :::4000 :::* LISTEN 31157/node
bash$ kill 31157
在 Windows 上,我收到以下错误:
EADDRINUSE:地址已在使用中:::8081。
按照下列步骤操作:
- 以管理员身份打开CMD
- 运行了以下内容
命令 netstat -ano|findstr “PID :8081”
得到了以下过程:
通过以下方式杀死了它:
任务杀戮 /PID 43144 /F
在MAC上,您可以这样做:
raghavkhunger@MacBook-空气 ~ % lsof -i tcp:8081 命令 PID 用户 FD 类型 设备大小/关闭节点名称 节点 23722 用户名 24u IPv6 0xeed16d7ccfdd347 0t0 TCP *:sunproxyadmin (LISTEN)
username@MacBook-空气 ~ % 杀伤 -9 23722
Cmd 的 Windows
1/2. 搜索 => 写入 cmd => 打开node.js command prompt
2/2. 运行 windows 命令:taskkill
结束一个或多个任务或进程。
taskkill /f /im node.exe
/f
- 强制结束
/im
- 指定要终止的进程的映像名称。
node.exe
-可执行文件
Windows - Mannualy by 任务管理器
此命令与转到详细信息选项卡下并选择任务(在我看来很整洁)相同。Task Manager
node
和end task
Visual Studio
有时有多个终端/任务(客户端/服务器等)。 选择并关闭 。ctrl + c
使用 netstat 获取所有节点进程及其正在使用的端口,然后通过 PID 杀死您唯一想要的进程
netstat -lntp | grep node
您将获得所有节点进程
tcp6 0 0 :::5744 :::* LISTEN 3864/node
然后当你得到 PID (3864) 时,只需通过 PID 杀死进程
kill -HUP PID
对于 macOS Monterey(12.0):
Apple 在 macOS Monterey 上为 AirPlay 引入了一些更改。现在,它使用 5000 和 7000 端口。如果在项目中使用这些端口,则需要禁用此功能。
系统偏好设置 > 共享 > 取消勾选“隔空播放接收器”
对于 macOS Ventura(13.0) 及更高版本的用户:
系统设置>常规>禁用 AirPlay 接收器
评论
我通常使用
npx kill-port 3000
或在我的 Mac 上。
killall node
评论
真的很简单,适用于所有操作系统的 ..
npx kill-port 3000
尽管您的问题如上所述,但您需要捕获节点退出的不同方式,例如
process.on('uncaughtException', (err, origin) => {
console.log(err);
});
// insert other handlers.
评论
Ctrl + z
Ctrl + c
pkill nodejs
pkill node