Skip to content

[Feature] proot 中用户自维护的长驻后台进程会被整体回收:求保活/白名单机制或环境重建自启钩子 #1373

Open

Description

@lynn6624

(关联域总帖:#919 终端/执行器进程生命周期)

这是一个用户自维护长驻进程的场景,和 #919 里 hiddenExec/root 工具调用产生的进程不完全同类,单独开一条,看是否该归并或另有官方姿势。

环境

  • Operit 1.12.2 / Android 12
  • 终端:proot (Ubuntu 24.04)

用法

在 proot 里跑一个用户自己写的长驻服务:一个 Node 进程,用 setsid ... & 分离,订阅外部 SSE 事件并注入本地对话;旁边还有一个 shell 写的 watchdog(同样 setsid 常驻,负责探活并拉起服务)。这些都不是通过工具调用派生的进程,而是用户在终端会话里自己起的。

现象

跑一段时间后(几十分钟到数小时不等),proot 层里这些自启常驻进程会被整体清掉——长驻服务、watchdog、批处理 flusher 一起消失。因为被清的是「同一层」,watchdog 救不了自己(它和它要守护的进程在同一层里)。桥的日志里没有 ERROR、没有 OOM 记录,进程就是静默消失;同时 App 本身还活着、可正常使用。社区里也有其他用户反馈「手机端 proot 部署不保活」。

想请教

  1. 对非工具调用产生、用户自己以 setsid 起在终端会话里的后台进程,Operit 会做定期回收吗?触发条件是什么(工具响应超时 / 会话空闲 / 内存压力 / App 生命周期回调)?
  2. 有没有保活 / 白名单机制(前台服务、任务锁定、隐藏设置项等),能让这类长驻进程不被清?
  3. 官方推荐的长驻后台服务跑法是什么?(是否本就不建议跑在 proot 里?)
  4. 若暂时没有机制,能否考虑提供一个「环境重建 / App 启动时可执行用户自定命令」的钩子(类似 autostart),让用户自维护的服务能被自动拉起?

当前 workaround

用 workflow(schedule 触发器)定时跑一个 ensure 脚本去检查并拉起,但受 WorkManager 15 分钟最小周期限制,空窗偏长,仍会漏事件。想确认有没有更正统的办法。谢谢。


(如与本项目既定路线不符或应并入 #919,请直接归并,不必另行回复。)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions