← 中文资源

简体中文版本

在 CLI 中处理 SIGINT 清理

捕获中断信号以删除临时文件并刷新进度,避免 Ctrl-C 留下损坏状态。

阅读英文原文

目标

中断长时间运行会留下部分临时文件与半写入的输出,使下次运行出错。本配方注册信号处理器,在收到 SIGINT/SIGTERM 时先执行清理再以约定退出码退出,并用幂等标志保证二者都安全;提醒 SIGKILL 无法捕获,且退出码应使用 130 便于脚本识别中断。

步骤要点

  1. 注册信号处理器先清理再退出。
  2. 用幂等标志保证重复触发安全。
  3. 按惯例以 130 表示被中断。
  4. 验证中断后无临时文件残留。
const tmp = makeTempDir();
let done = false;
function cleanup() {
  if (done) return; done = true;
  rmSync(tmp, { recursive: true, force: true });
  process.exit(130);
}
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);

排错提示

  • 清理可能被执行两次,需幂等。
  • 退出码错误会让脚本误判。
  • SIGKILL 无法捕获。

适用边界

  • 无法捕获 SIGKILL。
  • 处理器中异步清理受限。