Linux의 init 프로세스와 Namespace
1. init 프로세스란?
init 프로세스는 리눅스 시스템에서 최초로 실행되는 프로세스로, PID 1을 가지며 다른 모든 프로세스를 관리하는 역할을 합니다.
시스템이 부팅될 때 커널에 의해 처음으로 실행되며, 시스템의 런타임 환경을 설정하고 서비스와 데몬을 실행합니다.
주요 역할
- 시스템 초기화: 파일 시스템 마운트, 스왑 공간 활성화.
- 서비스 시작: 네트워크, 데이터베이스, 로그 관리 등 데몬 시작.
- 프로세스 관리: 고아 프로세스를 수거하고 종료된 자식 프로세스의 상태를 처리.
init 프로세스의 종류
리눅스 배포판마다 사용되는 init 시스템이 다를 수 있습니다:
- System V init (sysvinit):
- 전통적인 init 시스템.
/etc/inittab
파일로 런레벨과 서비스를 설정.
- Systemd:
- 현대적인 init 시스템으로, 병렬 서비스 시작과 종속성 관리 지원.
- 대부분의 최신 배포판에서 기본으로 사용.
- Upstart:
- Ubuntu에서 사용되던 이벤트 기반 init 시스템.
init 상태 확인 명령어
- init 프로세스 확인:
ps -p 1
- Systemd 상태 확인:
systemctl
2. Namespace란?
Namespace는 리눅스 커널의 격리 기술로, 프로세스가 자원의 독립된 인스턴스를 보도록 설정하는 기능입니다.
컨테이너 기술(예: Docker, Kubernetes)에서 자주 사용되며, 프로세스 간의 자원 충돌을 방지합니다.
주요 특징
- 자원 격리: 프로세스가 다른 프로세스와 자원을 공유하지 않고 독립된 환경에서 실행.
- 컨테이너 기반: 컨테이너 기술의 핵심 기능 중 하나.
- 유연성: 프로세스에만 영향을 미치므로 시스템 전체에는 영향을 주지 않음.
Namespace의 종류
- PID Namespace:
- 프로세스 ID를 격리.
- 각 Namespace에서 독립된 PID 트리를 가짐.
- Mount Namespace:
- 파일 시스템의 마운트를 격리.
- 서로 다른 프로세스가 별도의 마운트된 디렉토리를 볼 수 있음.
- Net Namespace:
- 네트워크 인터페이스를 격리.
- 각 Namespace에서 독립된 네트워크 스택 사용 가능.
- UTS Namespace:
- 호스트 이름과 도메인 이름을 격리.
- IPC Namespace:
- 프로세스 간 통신(IPC) 자원을 격리.
- User Namespace:
- 사용자와 그룹 ID를 격리.
Namespace 생성 예제
- 새로운 Namespace에서 Bash 실행:
unshare --pid --fork bash
- 새로운 Mount Namespace 생성:
unshare --mount
- 현재 Namespace 확인:
lsns
3. init 프로세스와 Namespace의 관계
- init 프로세스는 시스템의 첫 번째 프로세스이며, 다른 프로세스의 부모 역할을 합니다.
- Namespace는 init 프로세스와 상관없이 특정 프로세스를 격리하여 독립된 실행 환경을 제공합니다.
4. 결론
- init 프로세스는 리눅스 부팅 과정의 핵심이며, 시스템 초기화와 프로세스 관리를 담당합니다.
- Namespace는 프로세스 간 자원을 격리하는 기술로, 컨테이너 환경에서 중요한 역할을 합니다.
'Linux' 카테고리의 다른 글
EXT4 파일 시스템 (2) | 2024.12.04 |
---|---|
리눅스의 루트 파일 시스템 (0) | 2024.12.04 |
Linux의 /tmp 디렉토리 (0) | 2024.12.03 |
커맨드 라인 인터페이스 (CLI) (1) | 2024.12.03 |
Linux에서 자주 쓰이는 명령어 (0) | 2024.11.10 |