关于ECS容器退出码生成机制及带退出原因的码值咨询
ECS容器退出码的生成机制
容器的退出码本质是容器内主进程的Unix/Linux标准退出状态码,生成逻辑分两类:
- 应用主动返回:由容器内的业务进程或启动脚本主动调用
exit(n)返回,这类退出码是否附带原因,取决于应用是否在退出前输出了错误日志,但ECS不会在事件中自动填充“退出原因”字段——除非应用的错误输出被容器运行时捕获并关联到事件。 - 运行时/ECS强制终止:当容器被系统或ECS平台强制停止时,退出码由终止信号转换而来(规则为
128 + 信号编号),这类情况ECS会在事件中明确附带退出原因。
针对你提到的几个退出码:
- 0:进程正常退出,属于预期内结束,ECS不会返回额外原因。
- 1:通用错误码,通常是进程未捕获的异常、手动终止但无明确系统触发原因,ECS也不会附加详细原因。
- 2:可能是两种情况:一是应用脚本/进程主动返回的错误(比如shell脚本中命令执行失败);二是运行时触发的错误(比如命令不存在、权限不足),后者ECS会附带原因。
附带退出原因且对DevOps至关重要的退出码
以下是常见的、ECS会附带明确退出原因的关键退出码,直接关联运维排查方向:
- 137:对应
SIGKILL信号,几乎都是容器因内存超出配置上限被强制杀死,是资源配置不足的核心信号,需要立即检查任务的内存预留/限制参数。 - 143:对应
SIGTERM信号,进程收到终止信号后正常退出,常见于服务滚动更新、任务被手动停止或ECS自动回收资源,需要确认是否为预期操作,排查是否存在意外的任务终止触发源。 - 139:对应
SIGSEGV信号,进程发生段错误,大概率是应用代码bug(比如访问无效内存地址),需要结合容器日志、核心转储文件排查代码问题。 - 2:当由运行时触发时,ECS会附带原因(比如
exec format error、permission denied),通常指向容器启动配置错误(比如镜像内命令不存在、任务执行角色权限不足)或运行时权限问题,是快速定位启动故障的关键信号。 - 129-159(128+信号编号):其他信号对应的退出码,比如130(
SIGINT,手动中断)、140(SIGUSR1,自定义信号),这类如果是系统/ECS触发的终止,都会附带原因,帮助区分是用户操作还是系统异常。
补充说明:
- 你当前忽略0和1的逻辑是合理的,这两类事件要么是正常结束,要么是无明确排查方向的通用错误,对DevOps团队的排查效率提升有限。
- 遇到退出码2的事件,优先查看ECS事件中的“退出原因”字段,再结合容器日志确认是应用自身错误还是配置/权限问题。
内容的提问来源于stack exchange,提问作者Roronoa Zoro
相关产品推荐
相关产品推荐

