You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在关闭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环境:
    1. 查找占用目标端口的进程PID:lsof -i :<你的端口号>
    2. 杀掉该进程:kill <查到的PID>
  • Windows命令提示符/PowerShell:
    1. 查找PID:netstat -ano | findstr :<你的端口号>
    2. 强制杀掉进程:taskkill /F /PID <查到的PID>

修改后,下次关闭Git Bash窗口时,Node.js进程会收到SIGHUP信号,自动执行服务器关闭逻辑,不会再残留进程占用端口。

内容的提问来源于stack exchange,提问作者Eujenio Gonzalez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:42:40