claude -p 不再提前停掉后台命令
Claude Code 2.1.292 修复:一次性的 claude -p 和 Agent SDK 在最终结果出来约 5 秒后会停掉后台命令,一次性的 -p 还会丢掉已排程的唤醒。这一版改为等它们结束。2.1.285 的后台超时(默认 30 分钟、最长 2 小时)没有在这句里被取消。

一次性脚本最怕的是主结果已经打印,后台还在跑的测试被一起杀掉。Claude Code 2.1.292 修了这件事。发行说明写:一次性的 claude -p 和 Agent SDK 运行,会在最终结果之后 5 秒停掉后台命令;一次性的 claude -p 还会丢掉已排程的唤醒。claude -p 后台命令被停 指的是修复前的行为。2.1.292 改为等这些后台命令和唤醒。说明没有写交互式终端里的后台任务以前也是 5 秒。
5 秒和 30 分钟是两道时限
2.1.285 给后台 Bash 和 PowerShell 加了超时:run_in_background 的 timeout 默认 30 分钟,最长 2 小时,到点停止并通知 Claude,见 后台命令默认 30 分钟会停。那是上限。2.1.292 修的是一次性 -p 和 Agent SDK 在结果出来大约 5 秒后就把后台停掉,不等到那道上限。升级之后,脚本应等到后台结束,而不是结果一打印进程就退出。30 分钟和 2 小时没有在这句里被拿掉。跑得比上限更久的作业,仍会在上限处停。
「等它们」没有写会把后台的退出码折进 claude -p 的退出码,也没有写超时之后谁收到通知。Agent SDK 写在「5 秒停掉后台命令」这一半,和 -p 并列。丢掉排程唤醒的那一半,说明只点了一次性 claude -p。SDK 是否也会丢唤醒,这句没有写。
交互会话的 /loop 是另一条
同一版还写:后台会话的进程重启后(例如崩溃),/loop 会悄悄停,因为挂起的唤醒丢了。那是后台会话自己重启,不是 -p 在 5 秒后杀命令。云会话里,容器重启弄丢 /loop 或排程任务之后会话一直睡着,2.1.290 曾试图告诉 Claude,2.1.293 又撤回了那次修复:不再告知,会话保持睡着。本机 -p 等后台,和云上会话醒不醒,不要用同一句「升级就能续上」解释。
CI 里若用超时包装整个 claude -p,包装的秒数要盖住后台命令,不能只盖住模型把最终结果打出来的时间。修复前,结果后大约 5 秒进程就会停掉后台。修复后,同一条包装若仍按「结果一出现就该退出」来杀进程,你会自己把等待打断。Agent SDK 的一次性运行同样改为等待后台命令。交互式终端里手动丢到后台的任务,不在「一次性 -p」这句的主语里,仍看 30 分钟那道上限。