# SC113：SIGTERM 无法送达

> SC113（SIGTERM 无法送达）表示操作系统拒绝把信号发送给你的服务进程。本文说明为什么会这样，以及如何让检查正常运行。

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

`SC113` 表示测试请求已在进行中，但操作系统没有把 `SIGTERM` 送达 shutdown-check 启动的进程。这次没有测试到关闭行为。

| | |
| --- | --- |
| 诊断码 | `SC113` (FAIL) |
| 阶段 | 启动与进行中的工作 |
| CLI 退出码 | 1 |
| 含义 | 操作系统拒绝把 SIGTERM 发送给该进程。 |
| 输出信息 | `Could not deliver SIGTERM to the service process` |
| 首先检查 | 确认服务与检查以同一个用户身份运行，并且服务还没有退出。 |

## 为什么会出现？

检查以同一个用户身份启动进程并向它发送信号，所以这种失败并不常见。通常的原因有：

- 发送信号的同一时刻，进程正好退出了。
- 受限的容器或沙箱不允许发送信号。
- 进程 ID 已经失效。
- 操作系统出错，信号没能发出。

## 应该怎么做？

再运行一次测试。如果问题重复出现，改用直接的启动命令，并在普通的 macOS 或 Linux 进程环境中运行检查。查看前面几行时间线，确认进程是不是先退出了。

如果包装进程收到了信号，真正的服务器却没有收到，信号仍然算已送达；这时你会看到 `SC301`、`SC302` 或 `SC300` 这类与退出或端口未关闭相关的诊断码。

## 如何确认已修复？

下一次运行应该包含 `signal sent — SIGTERM`。如果之后仍然失败，新的诊断码反映的是服务器的关闭行为，而不是信号投递。

如果只在权限受限的容器中失败，把它的进程和安全设置与本地普通的 Linux 运行环境做对比。

## 相关内容

- [信号投递的原理](https://shutdown.jscrate.dev/zh/docs/how-it-works#6-send-sigterm)
- [兼容性与限制](https://shutdown.jscrate.dev/zh/docs/compatibility)
- [SC112：在 SIGTERM 前已退出](https://shutdown.jscrate.dev/zh/docs/codes/sc112)
- [SC301：退出码错误](https://shutdown.jscrate.dev/zh/docs/codes/sc301)
