# SC112：在 SIGTERM 前已退出

> SC112（在 SIGTERM 前已退出）表示从启动确认通过到发出信号的间隙里，服务或某个测试请求已经结束。让测试请求运行得更久一些。

Source: https://shutdown.jscrate.dev/zh/docs/codes/sc112
Last updated: 2026-09-23

`SC112` 表示启动确认通过之后、shutdown-check 发送 `SIGTERM` 之前，进程或测试请求已经结束。这个间隙很短，所以出现这个诊断码，通常说明测试请求的时长只是勉强够用。

| | |
| --- | --- |
| 诊断码 | `SC112` (FAIL) |
| 阶段 | 启动与进行中的工作 |
| CLI 退出码 | 1 |
| 含义 | 就在发送信号前的一刻，服务或某个测试请求已经结束。 |
| 输出信息 | `Service or work exited before SIGTERM could be sent` |
| 首先检查 | 让测试请求的耗时长于启动它所需的时间，确保 SIGTERM 到达时它仍在运行。 |

## 如何修复？

让测试请求的时长明显长于确认它已开始、再发送信号所需的时间。加一到两秒的可控延迟通常就够了。

另外检查：

- 服务不是设计成处理完一个请求就退出。
- 探测路由报告工作开始的时间没有太晚。
- 没有定时器或后台任务让进程停止。
- 测试路由在繁忙的 CI runner 上表现一致。

不要靠调大 `shutdown.deadlineMs` 来解决：这个计时器在信号发出后才开始，影响不到这个间隙。

## 如何确认已修复？

修复后的时间线中，`signal sent` 紧跟在 `work confirmed active` 之后，两者之间没有进程退出或请求结束的事件。在最慢的 CI 环境中多运行几次，确认这段时间余量是可靠的。

如果是服务本身在这个间隙里退出，去应用日志里找定时器、一次性运行模式或未处理的错误，而不是延长测试请求。

## 相关内容

- [选择可靠的启动确认](https://shutdown.jscrate.dev/zh/docs/in-flight-work)
- [SC111：测试请求始终未处于进行中](https://shutdown.jscrate.dev/zh/docs/codes/sc111)
- [SC113：SIGTERM 无法送达](https://shutdown.jscrate.dev/zh/docs/codes/sc113)
