0. init 시스템이란?

개발 99·2025년 12월 5일

리눅스

목록 보기
1/3

1. init 시스템이란?

: 커널 부팅이후, 실행되는 첫 프로세스.( 커널이 직접 실행시키는 유일한 프로세스. )
init은 부모 프로세스가 없고, init을 제외한 나머지 모든 프로세스의 조상.

init의 역할.

( https://www.kernelpanic.kr/16 )

  • 여기서, 백그라운드 프로세스는 initrc 하위 기록된 서비스들을 의미한다( 직속 부모 = init ).
    &로 실행되는 프로세스는 부모가 쉘이다. 따라서 두개의 의미는 완전히 다르다.

이후 실행 과정.

init실행 -> getty( get tty) : 터미널 준비 -> 사용자 로그인 -> 사용자 쉘 접근.

PID 1: init(systemd)
 └─ getty (콘솔 제공) ,stdin/stdout 설정.
     └─ login (인증)
         └─ bash (쉘)

1개의 getty -> 1개의 login -> 다수의 쉘 가능.

2. 대표적인 init 프로세스 = Systemd.

  1. 적극적인 병렬처리 기능 ( 그래서 service를 등록할 때, 순서가 중요한 것이었다. )

  2. 소켓과 D-Bus 활성화

  3. on-demand 데몬 실행

  4. 프로세스 트래킹

  5. 파일시스템 마운트 및 마운트 관리

  6. 의존성 기반의 서비스 컨트롤 로직

  7. SysV init 스크립트에 대한 호환성

  8. 로깅 데몬 제공

  9. 기본적인 시스템 설정 컨트롤 유틸리티 제공

  10. 다양한 네트워크 관련 데몬


( https://www.kernelpanic.kr/16 )

  • Systemd에서 사용하는 방식 = 이벤트 방식임( 병렬 실행 ).
    ( 다른 방식들은 비용이 매우 비싸다. )
  • ini 방식으로 파일 작성.

3. Service 관리.

: 실행된 Service는 항상 Init만 부모 프로세스로 가진다. 따라서, init이 서비스의 생명주기 및 모니터링을 관리.

참고로, systemctl이라는 유틸을 통해서 서비스의 상태를 모니터링 및 관리

systemctl 참고 자료.


( https://www.kernelpanic.kr/16 )

Systemd가 관리하는 서비스.

  • systemd-network: 네트워크 관리 서비스로, DHCP(동작 IP 할당) 작업, 와이파이 연결, 네트워크 브릿징 등의 다양한 기능을 제공한다.

  • systemd-udevd: 등록된 디바이스가 연결되면 동적으로 디바이스 노드를 만든다. 예를 들어서 usb를 연결하면 특정 폴더에 마운트 되도록 할 수 있다.

  • systemd-journald: 시스템 서비스와 커널 로그를 저장한다. 아래 2.5 유틸리티 제공 절에서 보다 상세히 다루었다.

  • systemd-timesyncd: 시스템 시간을 네트워크 시간과 동일하게 맞춰주는 서비스이다.
    번외) dbus: 리눅스 IPC를 돕는 버스 서비스이다. systemd만의 고유한 서비스가 아님에도, freedesktop.org에서 systemd의 장점으로 넣었길래 일단 추가했다. (이유를 안다면 부디 알려주기를 바란다.) dbus는 오늘날 리눅스에서 가장 핵심적인 시스템 서비스 중 하나이기 때문에, 조만간 dbus를 주제로 포스트를 올릴 예정이다.

Systemd의 유틸리티

  1. joutnalctl
    : 시스템 서비스 및 커널의 로그 확인.

  1. networkctl
    : systemd-network 서비스를 사용하는 경우, networkctl을 이용해서 서비스를 모니터링

  2. 기타 api

  • sd-bus: dbus를 사용하기 위한 api를 제공한다. gdbus와 더불어 가장 많이 사용되는 dbus api 중 하나이다.

  • sd-event: C언어로 eventloop를 관리하는 것을 돕는 api이다. C로 간단한 event 기반 프로그래밍을 할 때 유용하다.

  • sd-journal: 시스템 로그 출력을 위한 api이다.

profile
구구구구구!

0개의 댓글