봉황대 in CS

[운영체제] Zombie Process ⊃ Orphan Process 본문

Computer Science/Operating System

[운영체제] Zombie Process ⊃ Orphan Process

등 긁는 봉황대 2023. 10. 21. 02:19

* 본 글은 2023학년도 2학기에 수강한 '시스템 프로그래밍' 과목 강의 내용을 함께 정리하여 작성하였습니다.

 

Zombie Processes


Zombie process(좀비 프로세스)

process가 할 일을 전부 마쳐서 종료되었음에도 불구하고, 자원들을 계속 소비하고 있는 process를 말한다.

 

 

Reaping


Process의 생성과 종료가 정상적으로 진행되는 상황을 보자.

 

  1. Parent process가 fork() system call을 호출하여 Child process가 생성된다.

  2. Child process가 자신의 할 일들을 모두 마치고 종료한다.
    → Parent process에게 SIGCHLD signal을 보내고, Kernel은 Child process의 자원들을 회수한다.
    → 이때 Child process의 PCB는 회수되지 않는다.

  3. Parent process에게 SIGCHLD signal이 도달한다.
    wait() 또는 waitpid()를 통해서 Kernel에게 Child process의 나머지 자원들도 회수하라고 요청한다. : Reaping

 

즉, Reaping(자원 회수)은 Parent process에 의해서 진행이 된다.

 

 

Orphan Processes


Child process 보다 Parent process가 먼저 죽어버린 상황에서는 어떤 일이 발생할까?

→ 이 상황에서의 Child process를 Orphan process(고아 프로세스)라고 부른다.

 

이러한 Child process가 종료된다면,

Parent process가 먼저 죽어버렸기 때문에 해당 Child process에 대한 자원 회수가 정상적으로 진행되지 않는다.

결국 Zombie process가 되어버린 것이다.

 

init process

Orphan process들은 결국 최상위 부모(모든 process의 조상)인 init process에 의해서 reaping 된다.

 

 

정리


Orphan process는 곧 Zombie process이다.

하지만 모든 Zombie process는 Orphan process가 아니다.

 

Zombie process가 발생하는 이유는

1. Parent process가 Child process 보다 먼저 죽었거나,

2. Parent process에서 wait() 또는 waitpid()를 호출하는 부분까지 아직 도달하지 않았기 때문이다.

 

2번의 경우에는 Parent process를 강제 종료시키면 Child process가 정상적으로 종료되는 것을 확인할 수 있다.

 

 

∴ Zombies ⊃ Orphans

 

 

Comments