JianFeeeee
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
..
2026-09-26 10:18:26 +08:00
2026-09-25 14:12:06 +08:00
2026-09-26 13:21:44 +08:00
2026-09-25 19:21:45 +08:00
2026-09-26 13:42:32 +08:00
2026-09-26 13:13:15 +08:00
2026-09-26 12:15:48 +08:00
2026-09-26 12:27:28 +08:00
2026-09-26 13:52:33 +08:00
2026-09-25 14:36:21 +08:00
2026-09-26 10:18:26 +08:00
2026-09-26 14:08:06 +08:00
2026-09-25 14:36:21 +08:00
2026-09-26 13:42:32 +08:00
2026-09-26 13:52:33 +08:00
2026-09-26 12:44:08 +08:00
2026-09-25 18:35:28 +08:00
2026-09-26 13:52:33 +08:00
2026-09-26 13:13:15 +08:00
2026-09-26 11:12:40 +08:00
2026-09-26 13:21:44 +08:00
2026-09-26 12:44:08 +08:00
2026-09-26 12:44:08 +08:00
2026-09-25 14:06:55 +08:00
2026-09-25 14:33:26 +08:00