Android-Zygote 의 시작 과정 상세 분석
Zygote 를 시작 할 때 ro.zygote 속성 에 따라 Zygote 시작 스 크 립 트 를 제어 합 니 다.시작 스 크 립 트 는 System/core/rootdir 디 렉 터 리 에 놓 습 니 다.
Zygote 는 시작 할 때 Zygote Init 의 main 방법 으로 갑 니 다.이 방법 에서 주로 다음 과 같은 일 을 했 습 니 다.
서버 엔 드 의 Socket 을 만 듭 니 다4.567917.예비 로드 류 와 자원SystemServer 프로 세 스 시작
Zygote 가 만 든 Socket 의 name 은 Zygote 입 니 다.Activity Manager Service 가 Zygote 에 새 프로그램 프로 세 스 를 만 들 기 를 기다 리 는 데 사 용 됩 니 다.
SystemServer 프로 세 스 를 시작 하면 시스템 서비스 도 SystemServer 프로 세 스 로 시 작 됩 니 다.
마지막 으로 AMS 가 새로운 프로그램 프로 세 스 를 만 들 기 를 요청 할 때 까지 방법 을 호출 합 니 다.
소켓 만 들 기
Socket 을 만 들 때 이름 이[ANDROID]인 이름 을 만 듭 니 다.SOCKET_zygote]이 이름 을 통 해 환경 변수의 값,파일 설명자 인 자 를 가 져 오고 마지막 으로 파일 설명 자 를 만 들 고 LocalServerSocket 을 생 성 할 때 들 어 옵 니 다.이것 이 바로 서버 의 Socket 입 니 다.Zygote 는 SystemServer 프로 세 스 를 시작 하면 이 서버 의 Socket 에서 AMS 신 호 를 기다 릴 것 입 니 다.
System Server 시작
SystemServer 를 시작 하 는 시작 인 자 를 저장 하기 위해 args 배열 을 만들어 야 합 니 다.SystemServer 프로 세 스 의 사용자 id 와 사용자 그룹 id 는 1000 으로 설정 되 어 있 으 며,프로 세 스 이름 은 system 입 니 다.server,시작 하 는 클래스 이름 은 com.android.server.SystemServer 입 니 다.이 어 Zygote 의 forkSystemServer 방법 을 호출 합 니 다.그 내 부 는 nativeForkSystemServer 라 는 Native 방법 을 호출 합 니 다.마지막 으로 fork 함 수 를 통 해 현재 프로 세 스 에 키 프로 세 스 를 만 듭 니 다.바로 SystemServer 프로 세 스 입 니 다.forkSystemServer 방법 이 되 돌아 오 는 pid 가 0 이면 현재 코드 가 새로 만 든 하위 프로 세 스 에서 실행 되 고 있 음 을 표시 합 니 다.handle SystemServerProcess 를 실행 하여 SystemServer 프로 세 스 를 처리 합 니 다.
AMS 대기
앞에서 만 든 Socket 의 fd 필드 값 을 가 져 와 fds 목록 에 추가 합 니 다.다음은 AMS 요청 을 무한 순환 으로 기다 리 겠 습 니 다.이 순환 에서 fds 의 데 이 터 를 pollFds 배열 로 옮 긴 다음 pollFds 를 옮 겨 다 니 며 현재 Zygote 프로 세 스 가 AMS 와 연결 되 었 는 지 판단 합 니 다.연결 이 되 어 있 으 면 acceptCommamdPeer 방법 으로 Zygote Connection 클래스 를 얻어 Socket 연결 목록 peers 에 추가 합 니 다.그리고 Zygote Connection 의 fd 를 fds 목록 에 추가 하여 AMS 에서 보 내 온 요청 을 받 을 수 있 도록 합 니 다.pollFds 를 옮 겨 다 닐 때 AMS 와 연결 하지 않 으 면 애플 리 케 이 션 을 만 들 라 는 요청 입 니 다.Zygote Connection 의 runOnce 방법 으로 새 프로그램 프로 세 스 를 만 듭 니 다.생 성 에 성공 하면 이 Socket 을 peers 와 fds 에서 지 웁 니 다.
Zygote 프로 세 스 시작 요약:
Zygote 프로 세 스 시작
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.