监督进程与 Presence 文件
让浏览器生命周期跟随启动器进程或本地 presence 文件,也可改为通知而不退出。
能力:supervisorProcess。启动参数:--supervisor-process-id 和 --supervisor-presence-file。EP: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 后需要重启,已签名配置还需重新签名。显式退出命令见进程管理,事件处理见消息通信。