问题描述
v0.4.5 中 bash 启动后立即以 exit code 0 退出,终端没有任何输出。v0.4.3 没有此问题。
复现
Hermux 调用:
session_id = vproc_ffi_create_session();
vpid = vproc_ffi_create_process(session_id, "/path/to/bash", argv, envp, pts, pts, pts);
Logcat
08:15:45.250 vproc: created session 3
08:15:45.250 vproc: self-test skipped (probe=ok)
08:15:45.260 vproc: virtual process created vpid=1 session=3 ptm=143
08:15:45.271 waiter: entering waitFor pid=1 sessionId=3
08:15:45.271 vproc: run_until_exit_s(vpid=1) returned 0
08:15:45.271 vproc: destroying session 3
从创建到退出仅 ~20ms,bash 没有产生任何输出到 PTY。
根因分析
v0.4.4/v0.4.5 新增的 setsid() 可能导致:
- bash 启动后发现自己不是前台进程组的一部分,直接退出
- 或者
setsid() 后 PTY slave 的 fd 连接断了(bash 的 stdin 变成无效 fd)
- bash 以交互模式启动时如果无法获得 controlling terminal,会直接 exit(0)
与 v0.4.4 的 SIGSEGV 不同(v0.4.4 在 set_signal_handler 崩溃),v0.4.5 改为了静默退出。
影响对比
- v0.4.3: bash 正常工作,有 job control 警告
- v0.4.4: bash SIGSEGV 崩溃
- v0.4.5: bash 立即退出,无输出
建议
setsid() 在 vproc 协程环境中可能无法正确工作。可能需要:
- 在 vproc 层面模拟 session/controlling terminal 语义,而非调用真正的
setsid()
- 或者让
setsid() 成为可选的,通过参数控制是否启用
- 或者让 vproc 在 setsid 后重新打开 PTY slave fd 并传递给 bash
相关
问题描述
v0.4.5 中 bash 启动后立即以 exit code 0 退出,终端没有任何输出。v0.4.3 没有此问题。
复现
Hermux 调用:
Logcat
从创建到退出仅 ~20ms,bash 没有产生任何输出到 PTY。
根因分析
v0.4.4/v0.4.5 新增的
setsid()可能导致:setsid()后 PTY slave 的 fd 连接断了(bash 的 stdin 变成无效 fd)与 v0.4.4 的 SIGSEGV 不同(v0.4.4 在
set_signal_handler崩溃),v0.4.5 改为了静默退出。影响对比
建议
setsid()在 vproc 协程环境中可能无法正确工作。可能需要:setsid()setsid()成为可选的,通过参数控制是否启用相关