监督进程与 Presence 文件

让浏览器生命周期跟随启动器进程或本地 presence 文件,也可改为通知而不退出。

能力:supervisorProcess启动参数:--supervisor-process-id--supervisor-presence-fileEP:internal.supervisor_process.exit_browser_on_exit

选择监督信号

信号支持平台含义
--supervisor-process-id=<pid>Windows、macOS观察运行中的外部进程
--supervisor-presence-file=<绝对路径>Windows、macOS、Linux观察本地文件是否持续存在

两个参数可以同时使用。例如启动器进程负责崩溃或退出监督,而删除 presence 文件可处理显式退出登录或撤销访问,无需退出启动器。

自动退出

默认在监督方结束后请求浏览器退出。以下 EP 明确设置该行为:

{
  "internal": {
    "supervisor_process": {
      "exit_browser_on_exit": true
    }
  }
}

Windows/macOS 上的 Node.js 启动器可以将自己的 PID 传给浏览器。替换实际可执行文件和实例路径:

import { spawn } from 'node:child_process';
const child = spawn('/absolute/path/to/browser', [
  '--user-data-dir=/absolute/path/to/profile',
  `--supervisor-process-id=${process.pid}`,
], { stdio: 'ignore' });
child.on('error', console.error);

保持启动器运行。这是外部启动器代码,不是 Provision Worker 脚本。supervisorProcess 授权自动退出;只有显式调用 JS process.exit() 才需要 processManagement

Presence 文件约定

启动浏览器之前在本地磁盘创建文件并关闭句柄。传入绝对路径;空路径、相对路径和包含 .. 的路径无效。目录不算 presence 文件。删除、移走文件、将其变为目录、启动时文件缺失或监视失败,都会触发配置的监督方结束动作。修改内容不会撤销 presence。

浏览器不读取文件内容、不锁定文件,也不会重建文件。启动器负责在退出登录或撤销访问时删除。Windows 上保持句柄打开可能延迟实际删除。为保证变更通知可靠,应使用本地文件系统,不使用 SMB/NFS。

只通知,不退出

exit_browser_on_exit 设为 false,并授予 messaging。每次 Provision Worker 启动时注册:

chrovia.messaging.on('chrovia.process.supervisor_exited', data => {
  console.log('Supervisor ended:', data);
});

PID 通知为 {pid},文件通知为 {path}。缺少 messaging 时,非退出模式会记录警告且无法发送消息,不会自动回退为退出。

重要限制

授予能力并不强制要求这两个参数。两个参数都没有时不会启用监督功能。无效或无法打开的 PID 可能只记录日志并跳过监视,不要把 PID 参数当成失败时默认拒绝的启动器身份检查。文件路径无效或缺失时的行为更严格,但文件存在也不等于认证某个人或启动器。

分别测试启动器退出和文件删除。更改 EP 后需要重启,已签名配置还需重新签名。显式退出命令见进程管理,事件处理见消息通信