简体中文 English 繁體中文 日本語 Русский
本文为静态镜像,内容以交互版为准 在交互式文档中心打开 →

ErisPulse.CLI.utils.runtime_state 模块


模块概述

运行实例状态文件(pidfile)工具

epsdk run 启动时把监督进程 PID、当前子进程 PID 与原始 argv 写入 .erispulse/runtime.json(工作目录维度,多项目互不干扰); epsdk stop / epsdk restart 据此定位并控制运行中的实例。

跨平台语义:

内部方法 供 CLI run / stop / restart 命令使用;状态文件损坏时按不存在处理。


函数列表

state_path() -> Path

获取状态文件绝对路径(当前工作目录维度)

返回值 (Path): 状态文件路径


read() -> 'dict | None'

读取运行实例状态

返回值: 状态字典 {"pid", "child_pid", "argv", "cwd", "started_at"};

     不存在或损坏时返回 None

write(pid: int, argv: 'list[str] | None' = None, child_pid: 'int | None' = None) -> None

写入/覆盖运行实例状态


update_child(child_pid: int) -> None

更新当前框架子进程 PID(监督进程每次拉起新子进程时调用)


clear() -> None

清除状态文件(不存在时静默)


effect_hint() -> 'tuple[str, dict]'

安装/升级后的「生效方式」三态提示

读运行状态文件 + 判活 + argv(含 --reload 判定):

返回值: (i18n 键, 格式化参数);无实例时空键


clear_mark() -> None

清除硬重启观测标记(hard_restart_* 字段,只应消费一次)

与 SDK 侧 ErisPulse.runtime.process_state.clear_mark 为同一 JSON 契约的独立实现(CLI 不加载主库);路径/字段名由契约测试钉死。


pid_alive(pid: int) -> bool

判断进程是否存活

返回值: 是否存活


terminate(pid: int, force: bool = False) -> bool

终止进程

POSIX:默认 SIGINT(监督进程按 Ctrl+C 同款路径优雅收尾);force=True 直接 SIGKILL。Windows:无优雅语义,os.kill 即 TerminateProcess。

返回值: 是否已发送终止信号


wait_gone(pid: int, timeout: float) -> bool

等待进程退出

返回值: 是否已在时限内退出


kill_tree_hard(pid: int) -> None

强制终止进程(Windows 下连带其直接子进程的兜底清理)