这是我第一次使用 Node.js,我遇到了这个问题:
我已经通过 IDE 的插件启动了一个 Node 服务器。不幸的是,我不能使用 IDE 的终端。所以我尝试从命令行运行脚本。
这就是问题所在 - 我正在使用 Express 模块,而我的应用正在侦听某个端口 (8080)。当我从命令行启动应用程序时,它会引发此错误:
events.js:71
throw arguments[1]; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:770:11)
at HTTPServer.Server._listen2 (net.js:910:14)
at listen (net.js:937:10)
at HTTPServer.Server.listen (net.js:986:5)
at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)
尽管我不太确定这个错误可能是什么,但我认为这是因为应用程序正在侦听一个已经在使用的端口。所以我做了:
netstat -an
我可以看到
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING
这是因为当我尝试从 IDE 启动 Node 服务器时,它已经启动了。
所以我想知道,如何停止所有服务器实例?另外,如果您能告诉我如何检测端口上正在运行的内容并将其杀死。
视窗机:
需要终止 Node.js 服务器,并且您没有任何其他 Node 进程正在运行,您可以告诉您的计算机终止所有名为 node.exe
的进程。看起来像这样:
taskkill /im node.exe
如果进程仍然存在,您可以通过添加 /f
标志来强制终止进程:
taskkill /f /im node.exe
如果您需要更细粒度的控制并且只需要终止在特定端口上运行的服务器,您可以使用 netstat
找到进程 ID,然后向其发送终止信号。因此,在您的情况下,端口为 8080
,您可以运行以下命令:
C:\>netstat -ano | find "LISTENING" | find "8080"
输出的第五列是进程 ID:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 14828
TCP [::]:8080 [::]:0 LISTENING 14828
然后您可以使用 taskkill /pid 14828
终止该进程。如果进程拒绝退出,那么只需在命令中添加 /f
(强制)参数。
MacOS机器:
该过程几乎相同。您可以杀死机器上运行的所有 Node 进程:
killall node
或者也正如在 @jacob-groundwater's answer below 中使用 lsof
所提到的,您可以找到侦听端口的进程的 PID(传递 -i
标志和端口以显着加快速度):
$ lsof -Pi :8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 1073 urname 22u IPv6 bunchanumbershere 0t0 TCP *:8080 (LISTEN)
在这种情况下,进程 ID 是 PID 列下方的数字,然后您可以将其传递给 kill
命令:
$ kill 1073
如果进程拒绝退出,那么只需使用 -9
标志,它是一个 SIGTERM
,不能被忽略:
$ kill -9 1073
Linux机器:
同样,该过程几乎相同。您可以杀死机器上运行的所有 Node 进程(如果 SIGKILL
不足,请使用 -$SIGNAL
):
killall node
或者也使用 netstat
,您可以找到侦听端口的进程的 PID:
$ netstat -nlp | grep :8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1073/node
在这种情况下,进程 ID 是第六列中进程名称之前的数字,然后您可以将其传递给 kill
命令:
$ kill 1073
如果进程拒绝退出,那么只需使用 -9
标志,它是一个 SIGTERM
,不能被忽略:
$ kill -9 1073
适用于 Linux、OS X
killall node
node: no process found
此外,当我 grep 查找在特定端口上运行的节点进程时,进程 ID 具有 -
而不是数字本身。
您可以使用 lsof
获取已绑定到所需端口的进程。
不幸的是,标志似乎因系统而异,但在 Mac OS X 上,您可以运行
lsof -Pi | grep LISTEN
例如,在我的机器上,我得到类似:
mongod 8662 jacob 6u IPv4 0x17ceae4e0970fbe9 0t0 TCP localhost:27017 (LISTEN)
mongod 8662 jacob 7u IPv4 0x17ceae4e0f9c24b1 0t0 TCP localhost:28017 (LISTEN)
memcached 8680 jacob 17u IPv4 0x17ceae4e0971f7d1 0t0 TCP *:11211 (LISTEN)
memcached 8680 jacob 18u IPv6 0x17ceae4e0bdf6479 0t0 TCP *:11211 (LISTEN)
mysqld 9394 jacob 10u IPv4 0x17ceae4e080c4001 0t0 TCP *:3306 (LISTEN)
redis-ser 75429 jacob 4u IPv4 0x17ceae4e1ba8ea59 0t0 TCP localhost:6379 (LISTEN)
第二个数字是 PID,他们正在侦听的端口位于“(LISTEN)”之前的右侧。找到流氓 PID 和 kill -9 $PID
以极端偏见终止。
Windows 和 GitBash 终端我需要在 Windows / Webstorm / GitBash 终端中使用这个命令
cmd "/C TASKKILL /IM node.exe /F"
如果你想杀死一个特定的节点进程,你可以去命令行路由并输入:
ps aux | grep node
获取所有节点进程 ID 的列表。现在您可以获取您的进程 id(pid),然后执行以下操作:
kill -9 PID
如果您想杀死所有节点进程,请执行以下操作:
killall -9 node
-9 开关就像 Windows 上的结束任务。它将迫使该过程结束。你可以做:
kill -l
查看 kill 命令的所有开关及其注释。
Linux
打动你的朋友
ps aux | grep -i node | awk '{print $2}' | xargs kill -9
但这是你会记得的
killall node
你可以试试这个:
taskkill /IM node.exe -F
它在 Windows 10 中运行良好
taskkill /f /im node.exe
如果您使用的是 Windows,请按照以下步骤操作:
打开任务管理器,找到这个进程:然后右击“结束任务”就可以了。就是这样,现在所有的 npm 命令都从开始运行。
多平台、稳定、最佳的解决方案:
使用 fkill 杀死占用您端口的进程:
fkill -f :8080
安装 fkill 使用命令: npm i -g fkill
npm i -g fkill-cli
。
你也可以试试:
killall nodejs
你可以试试
killall node
你也可以试试
killall nodejs
我正在使用 windows 操作系统。
我杀死了所有节点进程并重新启动了它工作的应用程序。
尝试
taskkill /im node.exe
使用以下命令从批处理文件中杀死并重新启动节点服务器
@echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF
在 windows 命令中键入命令打击:
taskkill /f /im node.exe
由于您指定了 Windows。如果要将其包含在 bat 文件中,则可能不希望它在进程未运行时生成错误。
因此,为了防止“错误:找不到进程“node.exe”。”,您可以添加一个过滤器:
TASKKILL /F /IM node.exe /FI "PID gt 0"
lsof -Pi :number-of-port
例如 3000
然后会在你的终端上出现类似的东西
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 26476 node 30u IPv6 63828225 0t0 TCP *:3000 (LISTEN)
kill PID-NUMBER-YOU-WANNA-KILL
例如kill 26476
PID 代表进程 ID
按 cmd 或 bash : Ctrl + C
process.exit()
在您的应用程序中导致 NodeJS 实例关闭。 bash 中的killall node
会杀死您机器上运行的所有 NodeJS 实例。taskkill /IM node.exe
。它将杀死所有名为node.exe
的进程。