这两天火星了一件事, Android 不喜欢 fork()/exec()

查看 33|回复 2
作者:acess   
Android 从一开始就不喜欢 Linux native executables ,认为这玩意游离于 Android framework 管理之外,属于灰色地带,不被鼓励,甚至默认这类进程随时可以被系统杀掉。
这件事最让我感觉难受的是,Google 是太懒了么?好像从一开始,甚至一直到今天,都仍然没有在官方文档里写明这件事。
时间线
早在 2013 年,stackoverflow 上就有相关问答,虽然很显然这并不是官方口径:
https://stackoverflow.com/questions/16179062/using-exec-with-ndk
呃虽然不是 Google 官方下场答的,但这个答主的理解被 Google 官方认可了。在 Android 10 执行 R^X 安全政策,禁止从可写的应用数据目录执行原生代码时(但打包在 APK 内并声明会解压到只读位置则仍然允许执行),Google 方面就在解释时引用了上面这个回答:
https://issuetracker.google.com/issues/128554619#comment4
然后 Android 12 时代 Google 同样是在未文档的情况下引入了一个“幽灵进程杀手”机制,连带 W^X 在一起简直是想要 Termux 死……于是 Termux 开发者替 Google 整理了一份文档:
https://github.com/agnostic-apollo/Android-Docs/blob/master/en/docs/apps/processes/phantom-cached-and-empty-processes.md
而且他还跑去 AOSP 官方 issue tracker 据理力争了一把……
值得庆幸的是 Google 还是听进去了一点,在 Android 14 引入了一个开发者选项,可以彻底把幽灵进程杀手关掉:
https://issuetracker.google.com/issues/205156966#comment120
acess
OP
  
这件事其实还让我想起来很多年前 @madeye 接受的一个 PR ,在 shadowsocks-android 里引入了进程被杀自动重启的 GuardedProcessPool 机制:
https://github.com/shadowsocks/shadowsocks-android/pull/594
那个时候好像认为这属于 vendor-specific bug (?明明是故意的)
现在看其实 ss-android 一直以来都在用幽灵进程支持自己的核心功能……(天
acess
OP
  
(啊啦坏了,一处 W^X 我写错成 R^X 了,捂脸)
您需要登录后才可以回帖 登录 | 立即注册

返回顶部