我有一个简单的服务器运行在node.js使用连接:

var server = require('connect').createServer();
//actions...
server.listen(3000);

在我的代码中,我有实际的处理程序,但这是基本的思想。我一直遇到的问题是

EADDRINUSE, Address already in use

我收到这个错误时再次运行我的应用程序后,它以前崩溃或错误。因为我没有打开一个新的终端实例,所以我用ctr + z关闭了这个进程。

我非常确定我所要做的就是关闭服务器或连接。我尝试在进程中调用server.close()。(“退出”,…);运气不好。


当前回答

ps aux | grep node
kill -9 [PID] (provided by above command)

描述:


Ps将给出进程状态,aux提供a:所有用户进程,u:用户自己的进程,x:所有其他未连接到终端的进程的列表。 管道符号:|将传递ps aux的结果以进行进一步操作。 Grep将从ps aux提供的列表中搜索所提供的字符串(在本例中为节点)。

其他回答

我也有同样的问题,但我发现这不是恶魔的问题。首先,我使用这个脚本开始我的过程:

{"dev": "nodemon -r dotenv/config app.js"}

应用程序可以正确启动,但只要任何文件改变,nodemon就不能重新启动它。与此同时,应用程序仍在后台继续运行。如果我按Ctrl+C,它退出,但端口3000上没有更多的进程,所以通过端口fuser -k 3000/tcp杀死它没有任何作用。

并且,我在app.js文件中使用。env端口。

const port = process.env.PORT || 3000;

因此,我只将端口值更改为3000,它就工作了。

const port = 3000;

我不得不找到另一种方法来加载.env文件,但这解决了我的问题。希望这能有所帮助。

的过程。On ('exit', ..)在进程崩溃或被杀死时不会被调用。它只在事件循环结束时被调用,由于server.close()在某种程度上结束了事件循环(它仍然需要等待当前正在运行的堆栈),因此将它放在退出事件中没有意义…

在崩溃时,执行进程。on('uncaughtException', ..)和on kill do进程。(SIGTERM, . .)

也就是说,SIGTERM(默认终止信号)让应用程序清理,而SIGKILL(立即终止)不会让应用程序做任何事情。

简单地退出服务器,并将服务器端口3000更改为31000,其工作正常。

你也可以通过命令行方式:

ps aux | grep node

来获取进程id。

然后:

kill -9 PID

在kill时执行-9会发送SIGKILL(而不是SIGTERM)。 SIGTERM有时会被节点忽略。

Win10, git bash v2.15, node v8.9.1, npm v5.5.1

我有一个包裹。Json脚本启动节点:"start": "node index.js"

无论何时我使用它,不管我是否用ctrl+c杀死它,我都遇到了这个问题。

如果我只是从git bash运行node index.js而不是npm run start并用ctrl+c杀死,我永远不会得到这个错误。

我不知道为什么,但我想这可能会帮助到一些人。