process lifecycle map

생성, 교체, 종료, 회수를 한 흐름으로 본다

프로세스 문제는 어느 호출이 부모에서 실행되고, 어느 시점에 커널 상태가 남으며, 누가 종료 코드를 회수하는지까지 연결해야 설명됩니다.

관계부모 PID와 자식 PID가 갈라지는 순간
주소공간fork 이후 공유, exec 이후 새 이미지
종료상태exit로 남기고 wait로 회수
01

fork

부모 문맥을 복제하고 두 실행 흐름이 서로 다른 반환값을 받습니다.

부모: 자식 PID 확인자식: 0을 받고 분기
02

exec

PID는 유지한 채 코드, 데이터, 스택을 새 프로그램 이미지로 교체합니다.

열린 파일 일부 유지주소 공간은 새로 적재
03

exit

실행 자원은 정리하지만 종료 상태는 부모가 읽을 때까지 남깁니다.

파일과 메모리 반환상태 코드는 커널에 보존
04

wait

부모가 종료 상태를 읽고 프로세스 테이블의 남은 항목을 회수합니다.

수거 성공: 항목 제거수거 지연: 좀비 위험
사건바뀌는 것남는 것
fork새 PID와 부모-자식 관계 생성메모리와 파일 디스크립터는 복제 또는 공유
exec실행 이미지와 주소 공간 교체PID와 일부 열린 파일은 유지
exit실행 자원 해제종료 상태는 부모가 읽기 전까지 유지
wait상태 코드 회수프로세스 테이블 항목 제거

진단 기준

좀비자식은 끝났지만 부모가 아직 wait를 호출하지 않은 상태
고아부모가 먼저 사라져 init 또는 subreaper가 새 부모가 된 상태
컨테이너PID 1이 자식 수거 책임을 지지 않으면 좀비가 누적될 수 있음
reaping

핵심 질문

프로세스 트리를 볼 때는 누가 만들었는지보다 누가 종료 상태를 회수할 책임을 갖는지가 운영 문제를 가릅니다.