내가 공부한후 후에도 참고할겸 작성하는 글 입니다.
리눅스 시스템프로그래밍 2판을 참고하였습니다. 참고로 저는 WSL2 환경에서 공부중 입니다.
1. Zombie process 란 무엇인가?
process가 실행을 마쳤지만 부모process에서 종료코드를 읽어가지 않은, 즉 여전히 시스템의 resource를 소비하고 있는 상태이다.
원래 child process가 종료된 경우 부모process가 child process의 뒷처리 작업(reaping) 을 해주어야 정상적으로 종료가 되는데, child process가 종료후 parent가 정리작업을 하지않은 상태를 말한다.
좀비 process는 최소한의 기본 뼈대만 유지할만큼의 적은 resource를 차지하지만, 이렇게 적은 resource일지라도 지속적으로 축적될 경우 문제가 생긴다.
항상 종료된 process는 부모가 reaping을 해주어야 정상 종료되는 것 이다.
그럼 reaping이란 무엇인가? 이어서 알아보자.
2. Reap?
child process가 종료되었을때 parent에 의해서 수행되는 뒷처리 과정이다.
reaping을 해줌으로써 종료된 자식 process의 status정보를 얻어올 수 있다.
부모 process가 자식process 보다 먼저 죽거나
좀비 상태인 자식process를 기다릴 기회를 얻기도 전에 종료된다면 어떻게 될까?
process가 종료될때 리눅스 커널은 그 process의 자식 process를 init-process(pid가 1인 process)의 자식으로 입양시킨다.
여기서 init-process는 컴퓨터가 처음 부팅될때 OS가 처음만든 process를 의미하며, 시스템 안에서의 모든 process는 init-process로부터 fork나 execve등을 통하여 만들어 진 것이다.
결론: 위의 방식을 통하여 부모가 자식보다 먼저 종료될 경우 init-process가 대신 reaping을 해 준다.
부모가 자식process를 reaping하는 것이 가장 좋은 방법이지만, 이런 안전장치를 통하여 수명이 짧은 process가 모든 자식 process를 기다려야 한다는 압박감을 덜 수 있었다.
그럼 reaping은 어떻게 하는것 일까?? 바로 wait 시스템함수를 이용해 주면된다. 다음 글을 읽어보자!!
'CS > System Programming (2021-2)' 카테고리의 다른 글
[시스템 프로그래밍] Parallel CNN (0) | 2022.01.19 |
---|---|
[시스템 프로그래밍] wait 함수 (0) | 2022.01.19 |
[시스템 프로그래밍] fork 함수 (0) | 2022.01.19 |
[시스템 프로그래밍] exec 함수들 (0) | 2022.01.19 |
[시스템 프로그래밍] Process : 프로세스 (0) | 2022.01.19 |
댓글