合并(闸机超时守卫修复): gate_run_timeout双缺陷(标志文件建时即真致退出码恒124+守卫孤儿sleep占管道)修复合回——区内凭据: A组函数级四路全对(4.7s/0·3.4s/124无残留·7·4.6s/0)+渲染闸全量【全绿】+--docs【验收通过】; 合回前置检查读数见pre-merge钩子; post-merge钩子推送触发远端CI
ci / gates (push) Successful in 39s
ci / gates (push) Successful in 39s
This commit is contained in:
commit
7158366a0e
2 files changed
+19
-15
No files matched your search
+19
-7
@@ -20,6 +20,8 @@ gate_game_path() {
|
|||||||
|
|
||||||
# 杀整棵进程树(<pid>)——递归杀子进程后杀本进程。macOS/Linux 走 pgrep -P;
|
# 杀整棵进程树(<pid>)——递归杀子进程后杀本进程。macOS/Linux 走 pgrep -P;
|
||||||
# Windows 侧 MSYS kill 对其可见进程有效,带 wrapper 树的场景仍由调用方原 taskkill /T 逻辑负责。
|
# Windows 侧 MSYS kill 对其可见进程有效,带 wrapper 树的场景仍由调用方原 taskkill /T 逻辑负责。
|
||||||
|
# 注意:Windows Git Bash 实测无 pgrep/pkill(2026-11-08 修复批)——本函数在 Windows 退化成只杀
|
||||||
|
# 顶格进程,引擎子进程残留由调用方段末 kill_orphans 清场兜底(probe_gate/render_gate 均有段后清点)。
|
||||||
gate_kill_tree() {
|
gate_kill_tree() {
|
||||||
local p c
|
local p c
|
||||||
kill -9 "$1" 2>/dev/null
|
kill -9 "$1" 2>/dev/null
|
||||||
@@ -29,26 +31,36 @@ gate_kill_tree() {
|
|||||||
# 带超时执行(coreutils timeout 的纯 bash 替代,双平台同语义):
|
# 带超时执行(coreutils timeout 的纯 bash 替代,双平台同语义):
|
||||||
# gate_run_timeout <秒> <日志路径> <命令...>
|
# gate_run_timeout <秒> <日志路径> <命令...>
|
||||||
# 命令输出重定向到日志;退出码=命令退出码,超时=124(与 coreutils 语义一致,判据与既有闸一致)。
|
# 命令输出重定向到日志;退出码=命令退出码,超时=124(与 coreutils 语义一致,判据与既有闸一致)。
|
||||||
# 实现=后台启动+守卫落标志文件(probe_gate run_suite 同款手法:taskkill 强杀后 wait 报 0 的
|
# 实现=后台启动+守卫轮询(守卫每 0.2 秒醒一次,看两样:停止文件在不在/到点没;
|
||||||
# 假绿以标志文件纠偏);超时先杀整树再回 124。
|
# 命令先完时父流程放停止文件,守卫看见即自己退场——没有嵌套长 sleep,从机制上无孤儿可留;
|
||||||
|
# 2026-11-08 修复批:旧版 mktemp 建标志文件「建时即真」致退出码恒 124+守卫被杀留孤儿 sleep
|
||||||
|
# 占输出管道至满档);到点未见停止文件=真超时:落标志文件+杀整树+回 124。
|
||||||
gate_run_timeout() {
|
gate_run_timeout() {
|
||||||
local t="$1" log="$2"; shift 2
|
local t="$1" log="$2"; shift 2
|
||||||
local kf
|
local kf stop
|
||||||
kf="$(mktemp "${TMPDIR:-/tmp}/gatetime_XXXXXX")"
|
kf="${TMPDIR:-/tmp}/gatetime.$$.$RANDOM.kf" # 只赋路径、不建文件——建时即真=旧缺陷病根(probe_gate run_suite 同款)
|
||||||
|
stop="${TMPDIR:-/tmp}/gatetime.$$.$RANDOM.stop"
|
||||||
|
rm -f "$kf" "$stop"
|
||||||
"$@" >"$log" 2>&1 &
|
"$@" >"$log" 2>&1 &
|
||||||
local pid=$!
|
local pid=$!
|
||||||
( sleep "$t" 2>/dev/null
|
( end=$((SECONDS+t))
|
||||||
|
until [ -f "$stop" ] || [ "$SECONDS" -ge "$end" ]; do
|
||||||
|
sleep 0.2 2>/dev/null || sleep 1
|
||||||
|
done
|
||||||
|
if [ ! -f "$stop" ]; then
|
||||||
touch "$kf"
|
touch "$kf"
|
||||||
gate_kill_tree "$pid"
|
gate_kill_tree "$pid"
|
||||||
|
fi
|
||||||
true ) &
|
true ) &
|
||||||
local guard=$!
|
local guard=$!
|
||||||
wait "$pid"; local st=$?
|
wait "$pid"; local st=$?
|
||||||
kill "$guard" 2>/dev/null; wait "$guard" 2>/dev/null
|
touch "$stop" # 放停止文件=通知守卫收工,0.2 秒内自退,无需 kill
|
||||||
|
wait "$guard" 2>/dev/null
|
||||||
if [ -f "$kf" ]; then
|
if [ -f "$kf" ]; then
|
||||||
gate_kill_tree "$pid"
|
gate_kill_tree "$pid"
|
||||||
st=124
|
st=124
|
||||||
fi
|
fi
|
||||||
rm -f "$kf"
|
rm -f "$kf" "$stop"
|
||||||
return "$st"
|
return "$st"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -373,14 +373,6 @@
|
|||||||
|
|
||||||
**状态**:待执行
|
**状态**:待执行
|
||||||
|
|
||||||
#### 闸机超时守卫缺陷修复——gate_run_timeout 标志文件恒真(2026-11-06 登记,来源=批次移交)
|
|
||||||
|
|
||||||
**实况**:tools/gate_platform.sh 的 gate_run_timeout 用 mktemp 预建超时标志文件,判据 `[ -f ]` 建时即真、超时态无法与正常完成区分(Windows Git Bash 实测直接调用 4 秒返回 124;远端各闸以工件锚定未受影响)。连带 tools/golden_baseline_refresh.sh 的 guard 子Shell sleep 420 未被 kill 短路(重采集等待 7 分钟症状)。修法=kf 先赋路径+rm -f 后置守卫(probe_gate.sh:97 run_suite 同款正确写法)。证据=tools/gate_platform.sh:37/:48+迭代53实现报告遗留呈报 1(git 历史可考)。
|
|
||||||
|
|
||||||
**改动面**:工具代码
|
|
||||||
|
|
||||||
**状态**:待执行
|
|
||||||
|
|
||||||
#### 关卡视口两 Shot 基线 mac 侧冻结(2026-11-06 登记,来源=批次移交)
|
#### 关卡视口两 Shot 基线 mac 侧冻结(2026-11-06 登记,来源=批次移交)
|
||||||
|
|
||||||
**实况**:golden/windows/ 已锚 lmap_entry/lmap_boss(提交 6394abf7);mac 子目录无该两 Shot——渲染闸对 mac 缺基线记 SKIP 不判红,两平台同盯缺一。义务=Mac 侧跑 tools/golden_baseline_refresh.sh --lmap 冻结 mac 基线并呈报确定性读数。证据=game/tests/golden/README.md 现持清单行与时效判定纪律行+迭代53实现报告遗留 2(git 历史可考)。
|
**实况**:golden/windows/ 已锚 lmap_entry/lmap_boss(提交 6394abf7);mac 子目录无该两 Shot——渲染闸对 mac 缺基线记 SKIP 不判红,两平台同盯缺一。义务=Mac 侧跑 tools/golden_baseline_refresh.sh --lmap 冻结 mac 基线并呈报确定性读数。证据=game/tests/golden/README.md 现持清单行与时效判定纪律行+迭代53实现报告遗留 2(git 历史可考)。
|
||||||
|
|||||||
Reference in new issue
Block a user