process spawn timeline

Unix 프로세스 생성

셸이 명령어 하나를 실행할 때도 부모와 자식의 역할 분리가 정확히 지켜져야 좀비와 리소스 누수를 막을 수 있습니다.

fork()

부모를 복제한다

주소 공간과 파일 디스크립터를 공유 출발점으로 삼고 반환값으로 부모와 자식을 구분합니다.

COW

필요할 때만 복사한다

페이지를 바로 복사하지 않고, 쓰기 시점에 변경된 페이지만 분리합니다.

exec()

자식의 프로그램을 바꾼다

PID는 유지하고 코드와 데이터는 새 실행 파일의 이미지로 교체합니다.

wait()

종료 상태를 수거한다

부모가 exit status를 읽어야 PCB 잔여 정보가 사라지고 좀비가 남지 않습니다.

운영 포인트

컨테이너나 서버 워커 관리에서는 자식 프로세스가 끝난 뒤 누가 wait를 호출하는지까지 설계해야 장기 실행 환경에서 PID가 고갈되지 않습니다.