在使用Windows 11系统运行Codex并发任务时,可能会遭遇进程突然卡死、终端失去响应的问题。具体表现为CPU占用率急剧飙升后归零,同时系统日志中反复出现session_id not found或Unknown state session的错误提示。这种情况并非网络延迟或普通代码错误引起的暂时性阻塞,而是异步任务调度层陷入了深度资源互锁。究其本质,是Tokio运行时内部发生了死锁:任务A持有了某个关键会话锁等待输出完成,而任务B却在阻塞状态中等待同一把锁释放后才能写入结果,最终导致整个调度器陷入永久僵局。
那么,导致Win11上Codex卡死无响应的核心原因究竟是什么呢?简单来说,这是Tokio任务调度器内部的会话管理机制发生了死锁。一个任务获取了会话锁并在等待I/O操作结束,而另一个任务必须等该锁释放才能继续执行。两者相互等待,形成闭环,最终致使所有并发请求冻结。这类似于交通中的“死结”:两个人同时试图通过一扇只容一人通行的门,一个在里面拉着门把手等待对方离开,另一个在外面等待门被打开,双方僵持不下,最终导致通道完全瘫痪。

立即处理:强制终止所有已卡死的活跃会话
首先,请打开一个全新的PowerShell或命令提示符窗口(切勿使用已经无响应的那个终端)。执行命令:codex session list。仔细查看返回的会话列表,重点识别那些状态标记为Alive但实际上已失去响应的会话ID。对于每一个可疑的ID,逐一执行codex session kill 命令进行终结。重复此操作,直到再次运行codex session list命令时,输出结果完全为空。
重要提醒:此步骤是所有后续修复操作的前提。必须彻底清空所有僵尸会话,否则后续的配置调整将无法生效。如果跳过此步骤,残留的会话会持续占用Tokio调度器的工作槽位,导致任何新建会话的尝试都会失败。
诊断问题根源:核查会话缓存与超时设定
我们可以采用以下两种方法来准确定位死锁的具体成因:
诊断方法一:检查本地会话缓存是否已满溢。
同时按下Win+R组合键,在运行对话框中输入%LOCALAPPDATA%Codexcachesessions并回车。进入该目录后,检查其中的文件总数。如果你发现存在超过300个以“session_”开头的.bin文件,这表明系统的会话自动清理机制已失效。此时,Tokio调度器可能已触发保护性熔断机制,从而拒绝创建任何新的任务。
诊断方法二:确认输出截止时间是否设置过短。
使用文本编辑器(如记事本)打开Codex的配置文件:%LOCALAPPDATA%Codexconfig.toml。在文件中搜索output_deadline_ms这个配置项。如果发现其数值小于或等于500毫秒,请立即将其修改为1500或更高。设置的时间过短,会导致任务在遇到轻微的I/O延迟时就被错误地标记为“已退出”,而实际上底层进程仍在运行。这种状态不一致会使得关键锁未被正确释放,从而成为死锁的诱因。
彻底解决:重置会话管理模块并配置自动回收
请严格按照以下四个步骤执行,以确保问题得到永久性修复。
第一步:终止所有Codex相关进程。
打开Windows任务管理器,在“进程”选项卡中筛选出所有名为“codex.exe”的进程,右键点击并选择“结束任务”。为了确保无任何残留,建议同时以管理员身份打开命令提示符,执行命令:taskkill /f /im codex.exe。
第二步:完全清除旧的会话缓存。
手动导航至并删除整个会话缓存文件夹:%LOCALAPPDATA%Codexcachesessions。如果在删除时系统提示“文件正在使用”,请返回第一步检查,确保所有Codex后台进程已被彻底结束。
第三步:修改配置文件以启用关键优化参数。
使用文本编辑器打开%LOCALAPPDATA%Codexconfig.toml文件。在文件末尾添加一个新的配置段落[unified_exec],并插入以下两行关键配置:
auto_cleanup_on_exit = true
max_concurrent_sessions = 8
第四步:全面验证修复效果。
重新启动一个PowerShell窗口。首先,执行命令codex session new --name "deadlock-test"创建一个新的测试会话。随后,立即输入测试指令sleep 3 && echo "done"。观察系统是否能在3秒后稳定地输出done,且整个过程中终端没有任何卡顿或延迟。如果测试顺利通过,则表明Tokio调度器已成功加载新的会话管理策略,Win11下Codex并发死锁问题已得到根本解决。
