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便会调用该方法