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

Node.js --watch模式下Windows 11无法捕获SIGTERM信号问题

Node.js --watch模式下Windows环境无法触发SIGTERM信号的原因

问题场景

  • 环境:Windows 11,Node.js v21.7.3(已测试v18.20.3)
  • 测试代码:
// to create the event loop
const timer = setInterval(() => {
  console.log('hello');
}, 2500);

console.log('hi!');

process.on('SIGTERM', () => {
  console.log('got SIGTERM');
  clearInterval(timer);
});

process.on('SIGINT', () => {
  console.log('got SIGINT');
  clearInterval(timer);
});
  • 执行命令:node --watch --watch-preserve-output index.js
  • 异常表现:修改文件触发重启后,本地仅输出重启提示和新进程的日志,未执行SIGTERM回调;但在线Linux环境下可正常触发SIGTERM并输出对应日志。

核心原因:Windows与类Unix系统的信号机制差异

Node.js的--watch重启逻辑在不同系统上的实现完全不同:

  • 类Unix系统(如在线环境的Linux)会向旧进程发送SIGTERM信号,触发优雅终止流程,所以你的回调能正常执行。
  • Windows原生没有SIGTERM这类Unix信号,Node.js在Windows上对SIGTERM的支持是模拟实现,仅在特定场景(比如通过taskkill /T /PID发送终止指令)下生效。而--watch模式在Windows上重启时,会直接强制终止旧进程,不会触发模拟的SIGTERM信号,导致你的监听回调根本没机会运行。

其他可能的影响因素

  • 终端环境:Windows默认的CMD、PowerShell与Linux终端的进程管理逻辑不同;即使使用WSL,WSL1的信号模拟能力有限,只有WSL2能更接近原生Linux的信号处理。
  • Node.js Windows特定实现:你测试的v18和v21版本,在Windows平台的--watch重启逻辑中,均未加入向旧进程发送模拟SIGTERM的逻辑,因此不会触发回调。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:20:02