OS/Linux

init vs. systemd

uuuhhh 2022. 12. 1. 10:45

▪ PID가 1인 프로세스


 

💡 init Process : PID가 1인 프로세스

 

  • 리눅스 부팅 과정
    1. 시스템 전원 공급
    2. BIOS (Basic Input / Output System)
    3. Boot Loader
    4. Kernel
    5. init

 

  • 커널 부팅이 완료된 후 첫 번째로 생성한 프로세스
  • 커널이 직접 실행하는 유일한 프로세스
  • 부모 프로세스가 없음
    • PPID → 0

 

  • 모든 프로세스init(PID : 1)을 부모 프로세스(PPID)로 가진다.
    • 모든 프로세스의 조상님
  • 모든 스레드kthreadd(PID : 2)를 부모 프로세스(PPID)로 가진다
    • 모든 스레드의 조상님

 

 

▪ systemd 란?


  • init 프로세스의 한 종류

 

  • init 프로세스의 변천사
    • SysV initsystemd

 

  • SysV init
    • 직렬 처리 방식의 부팅
      • 순서대로 프로세스 실행 → 느림

 

↔ 호환 가능

 

  • systemd
    • 병렬 처리 방식의 부팅
      • 빠름
    • 다양해진 Unit
      • sshd.service
      • sshd.socket
    • cgroup 제어
    • 시스템 상태 저장 후 사용 snapshot 기능 지원
    • journald 이벤트 로깅 데몬과 같은 여러 다양한 API 지원
    • 등..

 

 

▪ systemd 기능


  • systemd 상태 모니터링

 

  • systemctl status
    • 실행 중인 유닛의 상태 정보를 출력
    • 유닛들을 cgroup으로 묶어서 출력

 

  • systemctl --failed
    • 오작동 유닛 확인
    • 흠.. 현재는 모두 멀쩡한가 봅니다..

 

  • systemctl (= systemctl list-units)
    • 로딩된 유닛들 출력
    • 유닛 파일 이름 / 활성화 상태 / 상세 설명 제공

 

  • systemctl list-unit-files
    • 설치된 파일 출력
    • 로딩되지 않았더라도 유닛 파일(.service, .device, ..)의 모든 서비스 출력

 

  • systemd 유닛 / 서비스 컨트롤 명령어
  영구히 적용 (재부팅 시 유지) 일회성 적용  
시작 / 등록 enable start restart
종료 / 해제 disable stop  

 

  • 유틸리티 제공
    • 프로그램
      • journalctl → 시스템의 서비스와 커널 로그 확인
      • networkctl → 네트워크 상태 정보 확인

journalctl 명령어
networkctl 명렁어