03解释了 PID 1 的信号与回收,18区分 task 与 content。现在讨论停止与恢复:`stop` 是请求进程退出的流程,`restart` 是另一次启动动作,日志是 FD 输出经采集路径形成的证据;三个动作不自动互相保证。

时间窗口需要观测

通常运行时先发终止信号,留宽限期等待程序自己处理、回收子进程并结束;超时后可强制终止。应用若安装 handler 却不结束在途请求,或 shell 没有转发信号,即使运行时遵守流程也可能直到超时。比较宽限期要保存发送时刻、程序收到的事件、最后一条业务响应、实际退出原因,单看 shell 的 137 不能推出是超时强制杀还是内存 OOM。

日志链也有不同持有者:程序写 stdout/stderr FD、shim/daemon 依配置收集、日志驱动再存储或转发。程序未 flush 缓冲、进程强制终止或采集器重启都可能造成末尾日志缺口;不能以运行时提示“容器 restarted”证明请求、日志和写盘数据已经恢复。daemon 的重启行为依运行时、shim、配置及版本而异,必须在专用实验 daemon 里验证,禁止重启共享宿主服务。

正例让相同 probe-app 记录一次有 handler 的 TERM 并在宽限期内退出,对照运行时 stop 的实际时刻;边界例令自编受控进程超过短宽限期,保存剩余进程、强制终止与日志缺失/完整证据;只在自建 VM 运行,并给出宿主控制台恢复路径。入口列出需要关联的容器 ID、PID 与日志;探针包本身不模拟 daemon 重启。本云端只运行过普通进程的 TERM 与 PID 1 安装 handler 的例子,daemon/容器停启实验均 NOT_RUN。

现象 最先检查 限定条件
SIGTERM 发送了却没退出 目标 PID、handler、子进程 不等于内核没送到
容器重启后有 PID 请求响应、数据与日志窗口 PID 存在不等于业务恢复
末尾日志不见 stdio FD、flush、驱动配置 不等于程序未执行

练习

  1. 预测有 handler 和没有 handler 的 PID 1 对宽限期内退出的不同影响;在专用 VM 保存时间戳、信号、退出状态与后续请求。
  2. 预测在专用 daemon 重启期间探针是否继续回应,按版本与 shim 记录进程树、日志缺口和请求失败率;禁止对共享 daemon 注入故障。

上一篇:20:rootless;下一篇从 netns 与 veth 构建最小通信路径。

系列总目录:从进程隔离到运行时与编排。

参考资料