Repository navigation
Replies: 2 comments
|
确定性复现确认(pristine 0.1.0-rc.7,npm tarball 全新解压)。 用一个自身 SIGINT-忽略的 Python 监督者拉起无 TTY 宿主(stdout 重定向文件、共享控制台),待 HTTP 就绪后发一次 import os, signal, subprocess, time, json, urllib.request
signal.signal(signal.SIGINT, signal.SIG_IGN)
p = subprocess.Popen(['node', 'lib/bin.js', '--profile', 'web', '--host', '127.0.0.1', '--port', '3999'],
stdout=open('boot.log', 'w'), stderr=subprocess.STDOUT) # 无 TTY
for _ in range(30):
time.sleep(1)
try: urllib.request.urlopen('http://127.0.0.1:3999', timeout=2); break
except Exception: pass
os.kill(0, signal.CTRL_C_EVENT) # 广播到共享控制台
time.sleep(4)
print(json.dumps({'alive_after': p.poll() is None, 'exit_code': p.poll()}))结果: {"booted": true, "pid": 11888, "alive_after": false, "exit_code": 130}与生产事故签名完全一致(静默消失、exit 130、无堆栈)。 复现前提(重要):宿主与发射进程须共享同一控制台。同机对照实验:用 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
dsh web 宿主进程在 Windows 上被工具子进程的杂散 CTRL_C_EVENT 误杀(exit 130),整站会话全部中断
复现、预期与验收
process.on('SIGINT', () => interrupt(130))不区分「有终端的交互启动」与「无终端的服务启动」,一律走优雅退出。宿主进程以 exit code 130 静默消失,所有进行中的会话、后台作业、子 agent 同时中断,且 stdio 被丢弃时无任何崩溃痕迹(无堆栈、无日志、无 OS 崩溃记录),从外部看就是「意外退出」。unexpected exit pid=45844 code=130 signal=null;Prefetch 排除了 taskkill/硬杀路径。latest(0.1.0-rc.7, 99f6f02)同一段代码未变,未修。建议修复方向(已本地验证可用):在 SIGINT 处理器里判别服务态,例如
更彻底的方向是让 Windows 上无 TTY 宿主创建独立进程组(CREATE_NEW_PROCESS_GROUP / new process group)或给工具子进程断开控制台继承,使子进程的 CTRL_C_EVENT 不再广播到宿主;但 isTTY 判别是最小且无行为回退的止血。
All reactions