为什么按 Ctrl + C 中断 Node js 服务器应用程序不会关闭以前打开的端口?

问题描述 投票:0回答:1

我在 localhost:3000 上有一个 Express 服务器。问题是每当我重新启动服务器时我都会得到:EADDRINUSE。因此服务器将在端口 3001 上运行。 我已经通过使用端口 3000 手动杀死 PID 解决了这个问题,但我很好奇为什么端口没有成功关闭。这是一个错误吗?

我做了一些研究,发现如何检测 ctl + c 信号中断然后退出。这行代码解决了我的问题,因此当按 ctl + c 时端口将关闭。

`process.on('SIGINT', function() {
      console.log("EXIT");
      process.exit();
});

但我还是想知道为什么nodejs默认不关闭然后中断。

node.js port exit sigint ctl
1个回答
0
投票

如果服务器没有正常关闭,它可能没有机会在进程终止之前释放端口。

如果有异步操作或后台任务正在运行,在关闭服务器之前没有正确处理,可能会导致端口没有及时释放。

在某些情况下,操作系统可能需要一些时间来释放与已终止进程相关的资源。

通过添加信号处理程序,例如示例中的 SIGINT 信号处理程序, 您确保服务器有机会在进程退出之前正确关闭。这允许服务器释放端口并避免重新启动时出现 EADDRINUSE 错误。

© www.soinside.com 2019 - 2024. All rights reserved.