问题描述
v0.4.4 新增的 setsid() + controlling terminal 支持导致 bash 崩溃。
复现
Hermux 中调用:
session_id = vproc_ffi_create_session();
vpid = vproc_ffi_create_process(session_id, "/path/to/bash", argv, envp, pts, pts, pts);
bash 启动后立即 SIGSEGV,终端空白。
Crash 详情
signal=SIGSEGV (11) si_addr=0x0
调用栈:
#02 pc 00096494 bash (set_signal_handler+116)
#03 pc 00096114 bash
#04 pc 000962f8 bash (termsig_handler+316)
#05 pc 00095d7c bash (termsig_sighandler+172)
进程以 exit code 127 退出。
根因分析
si_addr=0x0 表明是 NULL pointer dereference。bash 在 set_signal_handler 中操作 controlling terminal 相关数据时触发。v0.4.3 没有此问题。
可能原因:
setsid() 在 vproc 协程上下文中不能正常工作(协程不是真正的 OS 进程,setsid 可能返回错误或产生未定义行为)
setsid() 成功后 bash 尝试 tcsetpgrp()/TIOCSCTTY 操作,但协程环境的 terminal 语义不完整
影响
- v0.4.3:bash 正常工作,但显示 "no job control" 警告
- v0.4.4:bash 崩溃,终端完全不可用
建议
setsid() 可能不适合在协程环境中直接调用。job control 的修复可能需要在 vproc 层面模拟 terminal session 语义,而不是依赖 Linux 的 setsid() 系统调用。
相关
问题描述
v0.4.4 新增的
setsid()+ controlling terminal 支持导致 bash 崩溃。复现
Hermux 中调用:
bash 启动后立即 SIGSEGV,终端空白。
Crash 详情
调用栈:
进程以 exit code 127 退出。
根因分析
si_addr=0x0表明是 NULL pointer dereference。bash 在set_signal_handler中操作 controlling terminal 相关数据时触发。v0.4.3 没有此问题。可能原因:
setsid()在 vproc 协程上下文中不能正常工作(协程不是真正的 OS 进程,setsid可能返回错误或产生未定义行为)setsid()成功后 bash 尝试tcsetpgrp()/TIOCSCTTY操作,但协程环境的 terminal 语义不完整影响
建议
setsid()可能不适合在协程环境中直接调用。job control 的修复可能需要在 vproc 层面模拟 terminal session 语义,而不是依赖 Linux 的setsid()系统调用。相关