把停止监督放在工作任务之外
Keep the Stop Supervisor Outside the Worker
让独立监督者管理总时限和停止决定,任务卡住时仍能发出停止信号。
以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。
使用场景
已授权无人值守任务 worker-a 卡在长调用里,配置心跳没有继续。教学启动前已明确监督期限、当前进程身份和可使用的停止策略;缺心跳不是自动证明遭入侵或所有工作失败。
具体做法
把时限与停止决定放在不依赖 worker-a 继续运行的控制路径。监督器绑定本任务身份与原授权,检查心跳时效,到约定条件用允许的停止方式。记录最后心跳、超时决定、实际停止确认及日志;停止未确认保留 unknown,停止成功也不是任务成功。
反例
让阻塞中的 worker-a 自己发现超时并停止;或者缺一条心跳就终止所有同名进程,报告分析已完成。
改进写法
教学外部监督器观察 worker-a 的指定心跳,按启动前约定的期限与进程身份决定停止。只使用获准策略,保留轨迹并核对停止结果;没有确认则写 unknown,已停止写 stalled待查而非成功。不要把其他任务或用户服务当本次对象,也不从缺心跳推断遭入侵。
为什么这样改
工作者失去控制路径时无法可靠执行自己的监督逻辑。独立控制路径仍能判断期限,但明确身份与状态防止监督变成无边界杀进程或假完成。
如何验证
教学模拟 worker 阻塞,监督器仍能记录心跳失效;停止确认与任务结果分别列。进程已被替换、读取不可用或停止失败时不能使用旧身份宣称已终止。
检查不依赖同一阻塞队列,日志保留但没有敏感内容外泄。本篇不终止真实任务。
适用边界
心跳只说明存活,不证明有意义进展或未受攻击。期限、平台停止和进程树机制需实际实现;冻结来源的 30 秒和 SIGKILL是实例,不是普遍安全默认。
原文与版本
- affaan-m/ECC · External heartbeat supervisor and stalled-task quarantine
查看此版本的文件ef648e01899b - affaan-m/ECC · Graceful versus hard termination and child-process group scope
查看此版本的文件ef648e01899b