|
|
6a9a955472
|
M10:启动生命周期(多实例/重复启动/残留清理)+ 10 项判据
用户定位:框架本身是给 agent 用的 MC 启动器 ⇒ 多实例、多版本隔离、
单个实例多次启动是天然要求。盘点发现缺的是**运行时管理**那一层。
新增 mcfold/launch.py:
- claim():启动前的**闸门**(重复启动必须拦在启动之前 ——
不拦的话两个 JVM 抢同一个 run/ 与 X display,报错指向渲染异常,
完全指不到「重复启动」)
- register():JVM 起来后登记 pid/启动时间/世代/版本/加载器
- status():四态分清 free / stale(有记录但进程已死=崩溃残留)/
running / foreign(pid 存活但不属于本实例=pid 被复用)
- stop():先 SIGTERM 超时再 SIGKILL,**两次都复核身份**
- cleanup():只清记录不杀进程(状态 foreign 时杀就是误杀)
防误杀:pid 会被系统回收复用 ⇒ 终止前必须校验 cmdline 含本实例路径。
判据 10 项,用**真 java 进程**(mock 测不出 pid 复用/残留这类缺陷)。
★ 「模拟进程的形状」必须与真实启动一致:sleep 3600 带路径会拒绝参数退出;
bash -c 会 exec 掉自己、cmdline 变成裸 sleep ⇒ 两种都测不到真实情形。
改用 java -cp … Hold <实例路径>(形状同真实 --gameDir)。
4 项变异全被抓。
★ 又一次**空变异**:把身份校验的 return 改成恒真,看似改了,其实上面还有
「是不是 java」早退 ⇒ 判据假绿。结论重申:**必须先验证变异真的落地**
(打印改动后的行为),再信它的结果。
210 项全通过。
|
2026-09-26 14:08:06 +08:00 |
|