码迷,mamicode.com
首页 > 移动开发 > 详细

android手机启动各个进程的前世今生

时间:2018-02-12 15:10:03      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:cap   客户   swapper   cpp   pid   ice   add   区分   service   

之前做过一个给客户apk进程开放cap_net_raw权限的事情,为了客户能用自己的方法抓取tcp/ip包,对android的fork有了一些了解

首先这个apk进程是zygote fork的,zygote进程的权限包含了cap_net_raw,但fork后android对apk的permission做了重写通过setcapabilities(),这时只需要在重写时加上这个cap_net_raw权限即可

这里先介绍一下流程

     fork     fork     fork

1,swapper  -- swapper   -- swapper

        -- init            -- init

             -- service~

             -- zygote      -- zygote

                  -- apk

       -- kthreadd

 

2,第一次fork,kernel/init/main.c

rest_init->kernel_thread();

第二次fork,android/system/core/init/service.cpp,解析并启动init.rc

bool Service::Start()->fork();

第三次fork,android/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp

static pid_t ForkAndSpecializeCommon()->fork()

3,对于kthreadd,kernel要创建新进程时,会把该进程放到kthread_create_list中由kthreadd进程创建出来

4,再说一下fork函数,fork()->clone()->do_fork(),do_fork()中完全copy父进程,只是子进程返回pid=0,父进程返回子进程的pid,以此来区分

android手机启动各个进程的前世今生

标签:cap   客户   swapper   cpp   pid   ice   add   区分   service   

原文地址:https://www.cnblogs.com/yuchaodu/p/8444238.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!