目标
中断长时间运行会留下部分临时文件与半写入的输出,使下次运行出错。本配方注册信号处理器,在收到 SIGINT/SIGTERM 时先执行清理再以约定退出码退出,并用幂等标志保证二者都安全;提醒 SIGKILL 无法捕获,且退出码应使用 130 便于脚本识别中断。
步骤要点
- 注册信号处理器先清理再退出。
- 用幂等标志保证重复触发安全。
- 按惯例以 130 表示被中断。
- 验证中断后无临时文件残留。
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。
- 处理器中异步清理受限。