如何在关闭Git Bash终端时正确关闭Express服务器?
解决关闭Git Bash终端时Express服务器无法终止的问题
你遇到的核心问题是:直接关闭Git Bash窗口时,终端会向Node.js进程发送SIGHUP(挂起信号),但你的代码只监听了SIGINT(对应Ctrl+C操作)和SIGTERM信号,导致关闭逻辑未触发,服务器进程残留并占用端口。
解决方案1:添加SIGHUP信号监听
修改你的信号监听代码,把SIGHUP也绑定到关闭处理函数上:
process.on('SIGTERM', closeMockServerHandler); process.on('SIGINT', closeMockServerHandler); process.on('SIGHUP', closeMockServerHandler); // 新增该行监听窗口关闭信号
同时优化关闭处理函数——原代码中Server successfully closed会在服务器实际关闭前打印(因为server.close()是异步操作),把日志移到回调里更准确:
function closeMockServerHandler() { console.log('Closing server....'); server.close(() => { console.log('Server successfully closed'); process.exit(); }); };
临时应急方案(无需重启电脑)
如果已经出现端口被占用的情况,不用重启电脑,直接杀掉残留进程:
- Git Bash环境:
- 查找占用目标端口的进程PID:
lsof -i :<你的端口号> - 杀掉该进程:
kill <查到的PID>
- 查找占用目标端口的进程PID:
- Windows命令提示符/PowerShell:
- 查找PID:
netstat -ano | findstr :<你的端口号> - 强制杀掉进程:
taskkill /F /PID <查到的PID>
- 查找PID:
修改后,下次关闭Git Bash窗口时,Node.js进程会收到SIGHUP信号,自动执行服务器关闭逻辑,不会再残留进程占用端口。
内容的提问来源于stack exchange,提问作者Eujenio Gonzalez
相关产品推荐
相关产品推荐

