关于Android进程,你需要知道的

导语 Android系统是怎样杀进程的,native进程是怎么管理的?本文为你解密

一、Android进程管理

Android是基于组件工作的,每个组件可以通过android:process节点指定在一个独立进程中执行,所以一个app里面可能会有多个Android进程。系统在强制停止app的时候是怎么干掉这些进程呢?

                             ActivityManagerService相关逻辑

这里我们可以看到核心逻辑,首先遍历出来该packageName下的所有Android进程放在procs集合里,接着我们在for循环里分别杀之。

这里我们可以看到调用Process的killProcessQuiet方法去杀进程,实际上最终调用linux进程机制发送-9信号将相关进程杀掉。

这里我们着重看一下killProcessGroup方法,这个逻辑是5.0之后新增的。看名字我们可以大概猜测一下是杀进程组,那Android里面的进程组什么样的呢?什么样的进程会被放在进程组里呢?

二、进程组

Android进程组借鉴了Linux进程组的机制,实际上就是fork出来的子进程会被和Android进程放到同一个进程组里面。

但是这里面不同的是,Android里面同一个进程组的进程会被记录的/acct/uid_xxx/pid_xxx/cgroup.procs文件下,这样当系统强制停止app的时候,就会从这个文件里面读取进程并杀之。

这块逻辑是5.0之后新增的。也是为了堵之前不杀native进程的漏洞。因为这个逻辑,所以之前市面上很成熟的native进程守护保活方案失效了。当然这里面还是有可以的做文章的空间,想要保活依然可以做到。不过Android每个版本都由相应的进化,所以需要分析源码来找到突破口。

最后给一张Android进程的分析图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

nginx proxy cache配置参数解读

本文主要解析一下nginx ngx_http_proxy_module中的cache相关配置参数。

711
来自专栏分布式系统进阶

Logstash使用中遇到的一些坑和解决方案

1852
来自专栏码匠的流水账

nginx http模块配置参数解读

本文主要解析一下nginx http模块配置参数。主要分socket相关参数,对clinet请求的buffer参数以及对response的buffer参数。

1182
来自专栏SDNLAB

【连载-4】数据中心网络虚拟化 配置管理技术

在构建虚拟网络时,管理员需要进行大量的配置工作,例如端口的ip地址和VXLAN配置等等。显然,没有人愿意在系统每次启动时都将繁琐的配置工作重复一遍,所以将配置信...

2655
来自专栏加米谷大数据

加米谷:Kafka Connect如何运行管理

上节讲述了Kafka OffsetMonitor:监控消费者和延迟的队列,本节更详细的介绍如何配置,运行和管理Kafka Connect,有兴趣的请关注我们的公...

3857
来自专栏码神联盟

NoSQL篇 | NoSQL从小白到码神 之 Redis篇

课程目录: - NoSQL背景 - NoSQL简介 - NoSQL和关系型数据库对比 - Redis简介 - Redis下载安装配置(Linux环境) - R...

5418
来自专栏乐沙弥的世界

Linux 内核参数优化(for oracle)

    Oracle 不同平台的数据库安装指导为我们部署Oracle提供了一些系统参数设置的建议值,然而建议值是在通用的情况下得出的结论,并非能完全满足不同的需...

752
来自专栏向治洪

Dalvik虚拟机

Dalvik虚拟机是google专门为android平台开发的一个java虚拟机,但它并没有使用JVM规范。Dalvik虚拟机主要完成对象生命周期的管理、线程...

1997
来自专栏牛肉圆粉不加葱

Spark Storage ③ - Master 与 Slave 之间的消息传递与时机

再次重申标题中的 Master 是指 Spark Storage 模块的 Master,是运行在 driver 上的 BlockManager 及其包含的 Bl...

721
来自专栏SDNLAB

数据中心网络虚拟化 配置管理技术

在构建虚拟网络时,管理员需要进行大量的配置工作,例如端口的ip地址和VXLAN配置等等。显然,没有人愿意在系统每次启动时都将繁琐的配置工作重复一遍,所以将配置信...

3224

扫码关注云+社区