我有一个简单的TCP服务器侦听端口。

var net = require("net");

var server = net.createServer(function(socket) {
    socket.end("Hello!\n");
});

server.listen(7777);

我用node server.js启动它,然后在Mac上用Ctrl + Z关闭它。当我尝试再次用node server.js运行它时,我得到这个错误消息:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
          ^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)

我关闭程序的方式是否错误?我怎样才能防止这种情况发生呢?


当前回答

对于windows,首先用端口号搜索PID

netstat -ano | findStr "portNumber"

在那之后,杀死任务,确保你在根你的“c”驱动器 命令是taskkill /F /PID你的PID

其他回答

你可以在localserver kill中使用以下命令(这里是8000)

http://localhost:8000/ kill PID(processId):

$:lsof -i tcp:8000

它会给你以下几组tcp:

命令pid user fd类型设备大小/关闭节点名称 节点21521 ubuntu 12u IPv6 345668 0t0 TCP *:8000 (LISTEN)

$:kill -9 21521

它将杀死TCP*:8000对应的processId

你可以输入.exit退出节点js REPL

我遇到了一个问题,有多个节点服务器正在运行,我只想杀死其中一个并从脚本重新部署它。

注意:这个例子在Mac上的bash shell中。

为此,我确保我的节点调用尽可能具体。例如,我没有从apps目录调用节点server.js,而是调用节点app_name_1/app/server.js

然后我可以杀死它使用:

Kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print $2}')

这只会杀死运行app_name_1/app/server.js的节点进程。

如果你运行节点app_name_2/app/server.js,该节点进程将继续运行。

如果你决定杀死他们,你可以使用killall节点,就像其他人提到的那样。

我的用例:在MacOS上,通过脚本在不同端口上运行/重新运行多个节点服务器

运行:“cd $PATH1 && node server1.js & cd $PATH2 && node server2.js &…”

stop1: "kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk '{print $2}')"

stop2 stop3…

重新运行:“stop1 & stop2 &…& stopN;运行

有关通过端口查找进程的更多信息:谁正在监听Mac OS X上的给定TCP端口?

$ sudo killall节点在另一个终端在mac上工作,而killall节点不工作:

$ killall node
No matching processes belonging to you were found