728x90
Pids in Linux
프로세스가 생성될 때 fork syscall을 통해 pid가 부모로 전달
커널에 의해 생성된 첫 프로세스는 pid1을 가짐
모든 프로세스는 부모를 계속 타고 올라가면 pid1을 만나고, 해당 프로세스가 죽으면 시스템 재부팅이 필요 (Init process)
이렇듯 Linux namespace는 unshare syscall을 통해 생성되고, 해당 namespace로 바로 이동하는 것
하지만 PID namespace는 바로 이동하지 않음
완벽히 분리된 구조라기보단 fork로 계층화된 process이고, PID namespace안에 따로 pid1이 존재하는 구조
PID Namespace
PID Namespace에서의 pid1이 죽으면 namepsace가 죽음
signal handlers가 자동으로 등록되지 않음
zombie, orphan process 처리를 해줘야함
unshare과 fork를 하고 난 뒤의 구조
이렇듯 PID namespace에서는 2개의 pid를 갖게됨
parent namespace에서 보면 PID4인 프로세스가 child namespace에서 보면 PID1로 존재
## host2 (parent namespace)
# ps -ef | grep unshare
root 19429 19423 0 05:32 pts/0 00:00:00 unshare -fp --mount-proc
# lsns -p 19429
NS TYPE NPROCS PID USER COMMAND
4026532230 mnt 2 19429 root unshare -fp --mount-proc
# lsns 4026532230
PID PPID USER COMMAND
19429 19423 root unshare -fp --mount-proc
19430 19429 root └─-bash
## host1 (PID(child) namespace)
# lsns -t pid -p 1
NS TYPE NPROCS PID USER COMMAND
4026532231 pid 2 1 root -bash
## host2 (parent namespace)
# lsns -t pid -p 19429
NS TYPE NPROCS PID USER COMMAND
4026531836 pid 127 1 root /sbin/init
하나의 호스트에서 unshare + fork로 새로운 process를 실행한 뒤
다른 호스트와 PID namespace에서 pid를 확인한 결과
차례대로 보면 pid19429가 PID(child) namepsace에서는 pid1로 존재하는 것을 확인가능
반응형
'개발 > 개발공부' 카테고리의 다른 글
Kubernetes Cronjob / 쿠버네티스, 크론잡, container, k8s, 반복, 크론잡 (0) | 2023.01.16 |
---|---|
User Namespace / Container 기초, 격리, 네임스페이스, 컨테이너, 간단정리, capabilities, 권한 (2) | 2023.01.14 |
Network Device 정리 / Bridge, Switch, Repeater, Hub, Router, 차이 (0) | 2023.01.13 |
Container Image / 컨테이너 이미지, Kubernetes, Docker, Dockerfile (2) | 2023.01.11 |
Mount Namespace / Container 기초, 파일시스템, 마운트, 네임스페이스, 컨테이너, 간단 정리 (2) | 2023.01.10 |
댓글