Android之Zygote(下)--- SystemServer详解

SystemServer是由zygote.forkSystemServer函数fork出来的子进程,forkSystemServer是一个native函数,

/dalvik/vm/native/dalvik_system_Zygote.c

static void Dalvik_dalvik_system_Zygote_forkSystemServer(
        const u4* args, JValue* pResult)
{
    pid_t pid;
    pid = forkAndSpecializeCommon(args, true);//fork一个子进程
    if (pid > 0) {
        int status;

        LOGI("System server process %d has been created", pid);
        gDvm.systemServerPid = pid; //保存了system_server进程的id
        if (waitpid(pid, &status, WNOHANG) == pid) { //检查刚才创建的子进程是否退出了
            LOGE("System server process %d has died. Restarting Zygote!", pid);
            kill(getpid(), SIGKILL); //system_server推出了
        }
    }
RETURN_INT(pid);

static pid_t forkAndSpecializeCommon(const u4* args, bool isSystemServer)
{
 setSignalHandler();   //设置信号处理函数
}
static void setSignalHandler() 
{
     sa.sa_handler = sigchldHandler;
    err = sigaction (SIGCHLD, &sa, NULL); //子进程死亡的信号
}
static void sigchldHandler(int s)
{
   if (pid == gDvm.systemServerPid) {
            LOG(LOG_INFO, ZYGOTE_LOG_TAG,
                "Exit zygote because system server (%d) has terminated\n", 
                (int) pid);
            kill(getpid(), SIGKILL); //死去的进程是SS zygote直接自杀
        }
}
}

SystemServer的使命(以下简称SS)

 可以看到在创建SS后,SS便会调用该方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值