최종 수정일 : 2019-03-22

init 프로세스

리눅스 위에서 동작하는 모든 프로세스는 init 프로세스에서 생성되어 실행된다.
리눅스 커널이 부팅된 후, 사용자 영역에서 init 프로세스가 최초로 실행되고 다음 시스템 동작에 필요한 다른 프로세스들을 순차적으로 실행시킨다.
시스템 부팅이 완료되면, init 프로세스는 백그라운드 프로세스로 동작하면서 다른 프로세스를 감시한다.
감시중인 프로세스가 종료되어 좀비 상태가 되면 해당 프로세스가 가진 자원을 정상적으로 반환시킨다.

안드로이드의 init 프로세스는 리눅스의 init 프로세스가 수행하는 기능 외에 추가적인 기능을 한다.


init 프로세스 실행 과정

안드로이드에서 커널 부팅이 완료되면, 사용자 프로세스인 init 프로세스를 최초로 실행한다.
start_kernel() 함수, init_post() 함수, run_init_process() 함수가 순차적으로 실행된다. 마지막 단계에서 init 프로세스를 실행한다.

init_post() 함수는 run_init_process() 함수를 호출한다.
run_init_process() 함수는 execute_command에 등록된 프로세스 파일의 경로(커널의 부팅 옵션으로 정의되어 있다.)를 가지고 execve() 시스템 콜을 호출한다.

execve() 함수는 인자로 전달된 파일경로의 프로세스를 실행한다.

커널의 부팅 옵션으로 파일 경로가 “init=/init”으로 정의되어 있어야 한다.
안드로이드 빌드 후 생성되는 루트 파일 시스템에서 최상위 디렉토리에 init 프로세스가 존재한다.