跳转至

进程恢复

OpenClaw 在 Gateway 未清理即停止时,对已注册 Codex 应用服务器子进程所采取的处理措施。本文是 Codex harness runtime 指南的一部分;Where each section moved 列出了所有章节的位置。

Gateway 硬停止后的恢复

在 POSIX 系统上,OpenClaw 在生成每个新的 stdio 子进程之前,会检查是否存在已注册的孤立 Codex 应用服务器进程。Gateway 启动时还会执行一次尽力而为的后台清理扫描;但生成前的检查仍然具有权威性。OpenClaw 会在发送 Codex initialize 之前,将父进程和子进程的身份信息记录在当前状态目录的 SQLite 插件存储中,因此子进程不可能在其注册信息持久化之前就开始原生 turn。

清理操作仅针对那些原始 OpenClaw 父进程已不再运行的已注册子进程。在终止孤儿进程及其可发现的子进程之前,它会检查进程 ID、启动时间和进程组。若记录中包含子进程命令行的指纹,则在发送信号前还必须与该活动进程匹配;持久化注册信息只存储该摘要,绝不存储原始参数。其他正在运行的 OpenClaw 实例、注册在其他状态目录下的进程,以及外部管理的 WebSocket 或 Unix socket 应用服务器均不受影响。这些可移植的进程检查并不能提供原子性的操作系统所有权保证,也无法发现那些在检查之前已独立重新指定父进程的子进程。

Linux 直接从 /proc 读取进程身份信息,包括启动 ID 和进程启动 tick,因此 Alpine/BusyBox 安装环境无需 procps。启动时的身份检查和命令检查共享一个 10 秒的截止时间。在 Linux 启动期间,空命令行会在该截止时间内等待,同时相同的活动进程身份仍然有效。注册仍然要求具备可用的命令指纹;无法读取或已变化的身份会导致失败。macOS 使用其原生 ps,并采用固定的区域设置和时区。注册检查仅检查观察者以及相关的父进程和子进程;无关的不可读进程不会阻塞这些检查。破坏性清理仍然要求在发送信号前完成完整的进程树检查和最新的身份检查。

如果某个必需进程无法被检查,或者有界清理无法确认已注册的孤儿进程已消失,则新的 stdio 连接将失败,而不会生成另一个子进程。请根据报告的原因进行处理:截止时间失败需要检查主机负载和 Gateway 日志;访问被拒绝失败则需要检查 Linux 上的 /proc 访问权限或 macOS 上的 ps 权限。其他检查失败需要确认进程检查设施可用并返回可用数据。不要为了处理超时而放宽权限。如果清理无法停止一个已确认的孤儿进程,请在重试前检查并停止该进程。如果清理预算耗尽,请重试以完成剩余注册项的清理。

此恢复机制依赖于生成进程时的注册信息。它不会发现由旧版 OpenClaw 遗留的未注册子进程,也不会通过扫描命令名称来推断所有权。Windows 没有等效的孤儿注册或恢复机制。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw