Zygote孵化System_server的最后阶段ForkAndSpecializeCommon里会调用SetSigChldHandler设置信号处理函数。SetSigChldHandler定义了信号处理函数SigChldHandler,当信号SIGCHLD到来的时候,会进入信号处理函数。如果子进程SystemServer挂了,Zygote就会自杀。从而导致Zygote重启。
frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
static void SigChldHandler(int /*signal_number*/) {
pid_t pid;
int status;
//Zygote监听所有子进程的存亡
while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
//某一个子进程挂了
if (WIFSIGNALED(status)) {
if (WTERMSIG(status) != SIGKILL) {
ALO

最低0.47元/天 解锁文章
575

被折叠的 条评论
为什么被折叠?



