第 10 章:沙箱的一生与状态管理
从创建到销毁
一个常见生命周期包括:创建环境、准备依赖、放入输入、执行任务、收集结果、销毁环境。系统应对每一步记录任务 ID、环境 ID、开始时间和最终状态。
“进程结束”“任务成功”“容器删除”是三个不同事件。程序退出码为零,但没有报告,仍可能是任务失败;报告产生了,但清理失败,也应留下待处理状态。
临时、持久与快照
临时环境适合一次性任务,结束后清理内部状态。持久环境适合需要多轮编辑的项目,但更容易积累依赖变化和遗留文件。快照可加快恢复环境,不过快照也可能包含缓存、用户文件或密钥。
容器删除不会自动删除宿主机的绑定目录,也不代表远程存储、备份和平台日志都已擦除。使用托管平台时,需要查清这些对象各自的保留策略。
预热池与复用
预热池提前准备环境,减少启动等待。复用环境可能把前一位用户的文件或进程带到后一位用户,因此复用前必须明确重置和身份隔离机制。简单地删除某个工作目录,未必能覆盖后台进程、内存和其他状态。
初学者可先采用每个任务独立环境的设计。等到测量发现启动时间是主要瓶颈,再考虑预热与复用。