我有一个使用connect在node.js中运行的简单服务器:
var server = require('connect').createServer();
//actions...
server.listen(3000);
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我有实际的处理程序,但这是基本的想法.我一直遇到的问题是
EADDRINUSE, Address already in use
Run Code Online (Sandbox Code Playgroud)
在以前崩溃或错误之后再次运行我的应用程序时,我收到此错误.由于我没有打开终端的新实例,因此我将关闭该过程ctr + z
.
我相当确定我所要做的就是关闭服务器或连接.我打过电话server.close()
的process.on('exit', ...);
,没有运气.
djb*_*ick 435
你也可以去命令行路线:
ps aux | grep node
Run Code Online (Sandbox Code Playgroud)
获得流程ID.
然后:
kill -9 PID
Run Code Online (Sandbox Code Playgroud)
在kill上执行-9会发送SIGKILL(而不是SIGTERM).有时我会忽略节点对SIGTERM的忽略.
Tor*_*amo 132
process.on('exit', ..)
如果进程崩溃或被杀死,则不会被调用.当事件循环结束它只是调用,因为server.close()
排序结束事件循环(它仍必须等待目前在这里和那里运行栈)是没有意义把该退出事件中...
在崩溃,做process.on('uncaughtException', ..)
和杀做process.on('SIGTERM', ..)
话虽这么说,SIGTERM(默认终止信号)让应用程序清理,而SIGKILL(立即终止)不会让应用程序做任何事情.
Sus*_*hil 132
我在运行win8的笔记本电脑上点击了这个.这很有效.
以"管理员"身份运行cmd.exe:
C:\Windows\System32>taskkill /F /IM node.exe
SUCCESS: The process "node.exe" with PID 11008 has been terminated.
Run Code Online (Sandbox Code Playgroud)
Min*_*iel 132
首先,您需要知道正在使用哪个进程 port 3000
sudo lsof -i :3000
Run Code Online (Sandbox Code Playgroud)
这将列出在此端口上侦听的所有PID,一旦有了PID,就可以使用以下命令终止它:
kill -9 {PID}
Run Code Online (Sandbox Code Playgroud)
Fat*_*lut 117
对于macOS 蒙特利(12.0):
Apple 对 macOS Monterey 上的 AirPlay 进行了一些更改。现在,它使用 5000 和 7000 端口。如果您在项目中使用这些端口,则需要禁用此功能。
系统偏好设置 > 共享 > 取消勾选 AirPlay 接收器
对于macOS Ventura (13.0) 及更高版本的用户:
系统设置 > 常规 > 禁用 AirPlay 接收器
mal*_*aki 87
我通常使用
npx kill-port 3000
Run Code Online (Sandbox Code Playgroud)
或者在我的Mac上。
killall node
Run Code Online (Sandbox Code Playgroud)
Aya*_*yan 56
使用以下命令检查端口3000上运行的进程的PID即id:
lsof -i tcp:3000
Run Code Online (Sandbox Code Playgroud)
它会输出如下内容:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 5805 xyz 12u IPv6 63135 0t0 TCP *:3000 (LISTEN)
Run Code Online (Sandbox Code Playgroud)
现在使用以下方法终止进程
kill -9 5805
Run Code Online (Sandbox Code Playgroud)
Dee*_*pta 42
在我的回答中重写@Gerard 的评论:
尝试
pkill nodejs
或pkill node
是否在类 UNIX操作系统上。
这将终止运行在任何端口上运行的节点服务器的进程。为我工作。
Shr*_*hna 25
你在Linux或Windows上吗?如果在linux上输入:ps
并检查节点进程的PID.
然后, sudo kill PID
编辑:对于Windows:
使用tasklist显示正在运行的进程列表:
tasklist
然后像这样终止节点进程(从ps
命令中获取PID ):
sudo kill PID
Mrk*_*dig 20
真的很简单,适用于所有操作系统..
npx kill-port 3000
Run Code Online (Sandbox Code Playgroud)
尽管您的问题如上所述,但您需要捕获节点退出的不同方式,例如
process.on('uncaughtException', (err, origin) => {
console.log(err);
});
// insert other handlers.
Run Code Online (Sandbox Code Playgroud)
Kit*_*Kit 16
我曾经遇到过这个错误并在这里采取了很多方法.
我的问题是我app.listen(3000);
在同一个app.js脚本中有两个调用.第一个app.listen()成功,第二个抛出错误.
我遇到的另一个有用的命令帮助我调试了sudo fuser -k 3000/tcp
会杀死你可能已经启动的任何恶意进程(某些进程可能会重启,例如,如果使用forever.js运行,但它对我有用).
Ada*_*ard 16
您可能会遇到即使终止线程或进程也不会真正终止应用程序的情况(这对我来说在 Linux 和 Windows 上每隔一段时间就会发生一次)。有时,您可能已经运行了一个未关闭的实例。
由于这些情况,我更愿意添加到我的package.json
:
"scripts": {
"stop-win": "Taskkill /IM node.exe /F",
"stop-linux": "killall node"
},
Run Code Online (Sandbox Code Playgroud)
然后我可以使用以下方法调用它们:
npm run stop-win
npm run stop-Linux
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您可以变得更漂亮,并使用参数标志制作这些 BIN 命令。您还可以将这些添加为要在 try-catch 子句中执行的命令。
MD *_*YON 16
在 Linux 中尝试
pkill nodejs
//or
pkill node
Run Code Online (Sandbox Code Playgroud)
注意这将杀死所有进程
删除一些特定的端口
// This will show all the port number which node js is using
netstat -lntp | grep node
// Kill your targeted used port
kill -HUP process_id
Run Code Online (Sandbox Code Playgroud)
flo*_*bon 14
这是一个衬垫(用端口或配置变量替换3000):
kill $(lsof -t -i:3000)
Run Code Online (Sandbox Code Playgroud)
小智 13
bash$ sudo netstat -ltnp | grep -w ':3000'
- tcp6 0 0 :::4000 :::* LISTEN 31157/node
bash$ kill 31157
Run Code Online (Sandbox Code Playgroud)
tec*_*n23 12
UI 解决方案对于 Windows 用户:我发现最重要的答案对我不起作用,它们似乎是 Mac 或 Linux 用户的命令。我找到了一个不需要记住任何命令的简单解决方案:打开任务管理器(ctrl+shift+esc)。查看正在运行的后台进程。找到任何 Node.js 并结束任务。
在我这样做之后,这个问题对我来说就消失了。正如其他答案中所述,后台进程仍在运行,因为之前遇到过错误并且没有调用常规的退出/清理功能,因此杀死它们的一种方法是在任务管理器中找到该进程并在那里将其杀死. 如果您从终端/powerShell 运行该进程,您通常可以使用 ctrl+c 来终止它。
Ezr*_*ton 11
1/2。搜索 => 写 cmd => 打开node.js command prompt
2/2。运行windows命令:taskkill
结束一项或多项任务或进程。
taskkill /f /im node.exe
Run Code Online (Sandbox Code Playgroud)
/f
- 强制结束
/im
- 指定要终止的进程的映像名称。
node.exe
- 可执行文件
此命令与转到Task Manager
详细信息选项卡下并选择node
任务(在我看来是整洁的)相同。
和 end task
有时有多个终端/任务(客户端/服务器等)。选择并关闭ctrl + c。
首先找出正在使用什么:
sudo lsof -nP -i4TCP:3000 | grep LISTEN
Run Code Online (Sandbox Code Playgroud)
您将得到类似:
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)
Run Code Online (Sandbox Code Playgroud)
然后,您可以按以下步骤终止该进程:
sudo kill 110
Run Code Online (Sandbox Code Playgroud)
然后,您将能够运行而不会出现侦听EADDRINUSE ::: 3000错误
小智 8
ps aux | grep node
kill -9 [PID] (provided by above command)
Run Code Online (Sandbox Code Playgroud)
描述:
在 Windows 上,我收到以下错误:
EADDRINUSE:地址已在使用:::8081。
请按照下列步骤操作:
命令 netstat -ano|findstr "PID :8081"
得到以下流程:
通过以下方式杀死它:
taskkill /pid 43144 /f
在 MAC 上你可以这样做:
raghavkhunger@MacBook-Air ~ % lsof -i tcp:8081 命令 PID 用户 FD 类型 设备大小/关闭 节点名称 节点 23722 用户名 24u IPv6 0xeed16d7ccfdd347 0t0 TCP *:sunproxyadmin (监听)
用户名@MacBook-Air ~ %kill -9 23722
万一检查您是否已经加入这一行多次误倍
app.listen(3000, function() {
console.log('listening on 3000')
});
Run Code Online (Sandbox Code Playgroud)
上面的代码用于 express,但只需检查您是否尝试在代码中两次使用相同的端口。
对于像我这样的 Visual Studio Noobs
您可能正在其他终端上运行该进程!
在Visual Studio中关闭终端后,终端便消失了。
我以为以前的一个被销毁的方式手动创建了一个新的。实际上,每次我单击“ 新终端”时,实际上是在以前的终端上创建一个新终端。
所以我找到了第一个终端,然后……Voila,我在那儿运行服务器。
小智 5
考虑到表格中的所有答案,我想补充一点。
我发现当我使用 Ctrl + Z 在错误时终止节点应用程序时,下一次当我尝试打开它时出现相同的错误 EADDRINUSE。
当我使用 Ctrl + C 终止节点应用程序时,下次我打开它时,它没有遇到任何问题。
将端口号更改为错误的端口号以外的其他内容解决了该问题。
使用 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 -HUP PID
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
463145 次 |
最近记录: |