5-State Process Model 을 보면 Terminated 상태가 있었습니다.
프로세스의 종료는 언제 일어나는가?
1. 프로세스가 자신의 할 일을 정상적으로 모두 마치고나면, exit() 이라는 system call 을 호출하여 자신의 state 를 terminated 로 바꿉니다.
2. 프로세스가 자신의 할 일을 수행하다가 복구할 수 없는 오류를 발생시키면 terminated 됩니다.
3. 부모 프로세스가 자식 프로세스에게 kill signal 을 보내면 자식 프로세스는 terminated 됩니다.
좀비 프로세스
시스템 프로그래밍 시간에 좀비 프로세스에 대해 다루었습니다. 간단히 복기해보면 좀비 프로세스란 "종료되었지만 정리되지 않은 프로세스" 입니다. 정리되지 않으면, 엄연히 state 를 갖는 프로세스로 존재하는 것입니다. 다만, 종료된 프로세스는 자신의 context 인 code, data, stack 은 전부 반환합니다. 그러나 이 프로세스가 현재 state 가 terminated 임과 이 프로세스가 동작하는 동안 얼마만큼의 컴퓨팅 자원을 사용했는지를 기록한 PCB 는 제거되지 않습니다.
그렇다면 정리는 언제 일어나는가?
시스템 프로그래밍 시간에 wait() 함수와 waitpid() 함수를 통해 자식 프로세스를 정리한 적 있습니다. 자식 프로세스는 terminated 되면 부모 프로세스에 시그널을 보내고 시그널을 받은 부모 프로세스는 자식 프로세스를 정리할 수 있습니다.
또는, 자식 프로세스보다 부모 프로세스가 먼저 종료되면 이 자식 프로세스를 orphan process라고 명명합니다. 고아 프로세스는 부모가 init 프로세스로 바뀌며 자식 프로세스가 종료되면 부모 프로세스인 init 이 orphan process를 정리합니다.
이 정리가 수행되고 나서야 terminated 된 프로세스의 PCB 가 완전히 사라집니다. 즉, 이 프로세스가 점유하고 있던 모든 컴퓨팅 자원이 "정리"가 수행되고 나서야 Release 됩니다.
'운영체제' 카테고리의 다른 글
[Operating System] 쓰레드 (0) | 2023.03.28 |
---|---|
[Operating System] 프로세스의 제어 : 프로세스 간 통신 (0) | 2023.03.28 |
[Operating System] 프로세스의 제어 : 프로세스 스위칭 (0) | 2023.03.20 |
[Operating System] 프로세스의 제어 : 프로세스의 생성 (0) | 2023.03.20 |
[Operating System] 프로세스의 제어 기본 개념 (0) | 2023.03.20 |