我有一个简单的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)

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


当前回答

或者你可以在一行中完成所有这些:

kill -9 $(ps aux | grep '\snode\s' | awk '{print $2}')

您可以将'\snode\s'中的node替换为任何其他进程名。

其他回答

在windows上,用CTRL+ALT+DEL打开任务管理器,然后杀死Node.js进程可以解决这个错误。

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

Linux下尝试:pkill节点

在windows上:

Taskkill /IM node.exe /F

or

from subprocess import call

call(['taskkill', '/IM', 'node.exe', '/F'])

Ctrl+Z挂起它,这意味着它仍然可以运行。

Ctrl+C会杀死它。

你也可以像这样手动杀死它:

ps aux | grep node

查找进程ID(左起第二):

kill -9 PROCESS_ID

这也可能有用

killall node

你可以在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