2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

커널의 프로세스 종료 과정은 어떻게 되나요?

_____
Q1: 커널에서 프로세스 종료란 무엇인가요?
A1: 프로세스 종료는 실행 중인 프로세스가 자신의 작업을 마치거나 강제로 종료될 때 시스템 자원을 반환하고 커널 상태를 정리하는 과정입니다. 이 과정에서 프로세스의 PCB(프로세스 제어 블록)가 제거되고, 할당된 메모리 등 자원이 해제됩니다.

Q2: 프로세스 종료는 어떻게 시작되나요?
A2: 프로세스가 정상 종료할 경우 보통 `exit()` 시스템 콜을 호출하며, 비정상 종료 시에는 강제 종료 시그널(`SIGKILL` 등)을 받아 종료됩니다. 커널은 이를 감지해 프로세스 종료 과정을 시작합니다.

Q3: 커널에서 프로세스 종료 처리의 주요 단계는 무엇인가요?
A3:
1. 종료 상태 기록: 프로세스가 종료 코드를 커널에 전달합니다.
2. 프로세스 상태 변경: 프로세스 상태를 `ZOMBIE`로 변경합니다.
3. 자원 해제: 프로세스가 사용하던 메모리, 파일 디스크립터, 기타 자원 해제 절차가 진행됩니다.
4. 부모 프로세스에 종료 알림: 부모 프로세스가 `wait()` 또는 `waitpid()` 호출 시 자식 프로세스 종료 정보를 받을 수 있도록 준비합니다.
5. PCB 제거: 부모가 종료 상태 정보를 수집하면, 프로세스 테이블에서 완전히 제거됩니다.

Q4: 좀비 프로세스란 무엇인가요?
A4: 좀비 프로세스는 종료되었으나 부모 프로세스가 아직 종료 상태를 수집(`wait()`)하지 않아 커널에서 프로세스 정보를 보관 중인 상태의 프로세스입니다. PCB가 남아 있어 시스템 자원을 소량 점유합니다.
Q5: 프로세스가 완전히 종료되려면 어떤 조건이 필요한가요?
A5: 부모 프로세스가 자식의 종료 상태를 수집하는 `wait()` 또는 `waitpid()`를 호출하여 커널이 프로세스의 PCB를 제거해야 완전 종료가 완료됩니다.

Q6: 커널이 프로세스 종료 시 자원을 해제하는 이유는 무엇인가요?
A6: 프로세스 종료 후에도 할당된 자원이 해제되지 않으면 메모리 누수나 파일 디스크립터 부족 등의 시스템 자원 고갈 문제가 발생할 수 있기 때문에 커널이 반드시 자원을 반환합니다.

Q7: 부모 프로세스가 종료 상태를 수집하지 않으면 어떻게 되나요?
A7: 자식 프로세스는 좀비 상태로 남아 시스템 자원을 점유하며, 반복되면 시스템 자원 고갈 문제를 일으킵니다. 대부분의 운영체제는 이러한 좀비 프로세스를 예방하기 위한 기법을 마련하고 있습니다.

Q8: 프로세스 종료 시 시그널은 어떻게 활용되나요?
A8: 프로세스 종료 시 커널은 부모 프로세스에게 `SIGCHLD` 시그널을 보내 자식 프로세스가 종료되었다는 사실을 알립니다. 부모는 이를 받아 적절히 처리할 수 있습니다.

Q9: 멀티쓰레드 프로세스는 종료 과정이 다른가요?
A9: 멀티쓰레드 프로세스는 모든 쓰레드가 종료되어야 프로세스가 완전히 종료됩니다. 한 쓰레드가 종료하더라도 나머지 쓰레드들이 실행 중이라면 프로세스 자체는 살아있습니다.

Q10: 커널 수준에서 프로세스 종료와 관련된 주요 함수/시스템 콜은 무엇인가요?
A10: 대표적으로 `exit()`, `_exit()`, `wait()`, `waitpid()`, `kill()` 등이 있으며, 이들은 프로세스 종료 요청부터 자원 반환과 종료 상태 수집까지 담당합니다.
커널의 프로세스 종료 과정은 운영 체제의 중요한 기능 중 하나로, 프로세스가 더 이상 필요하지 않거나 종료 요청을 받았을 때 이를 안전하고 효율적으로 처리하는 절차를 포함합니다.

이 과정은 여러 단계로 나뉘며, 각 단계는 시스템의 안정성과 자원 관리를 보장하는 데 중요한 역할을 합니다.

1. 프로세스 종료 요청 프로세스 종료는 일반적으로 두 가지 방법으로 발생합니다.

첫 번째는 프로세스가 스스로 종료하는 경우로, `exit()` 시스템 호출을 통해 자신의 종료를 요청합니다.

두 번째는 외부에서 종료 신호를 받는 경우로, 예를 들어 `kill` 명령어를 통해 다른 프로세스가 종료 신호를 보낼 수 있습니다.

이 신호는 SIGTERM, SIGKILL 등 다양한 형태가 있으며, 각 신호는 프로세스에 대해 다른 행동을 요구합니다.



2. 종료 신호 처리 프로세스가 종료 신호를 받으면, 커널은 해당 프로세스의 신호 처리기를 호출합니다.

프로세스가 신호를 처리할 수 있는 경우, 사용자 정의 종료 처리 로직을 실행할 수 있습니다.

예를 들어, 파일을 닫거나 메모리를 해제하는 등의 작업을 수행할 수 있습니다.

그러나 SIGKILL과 같은 강제 종료 신호는 프로세스가 이를 무시할 수 없으며, 즉시 종료됩니다.



3. 프로세스 상태 변경 프로세스가 종료를 수용하면, 커널은 해당 프로세스의 상태를 '종료(terminated)'로 변경합니다.

이 상태는 프로세스가 더 이상 실행되지 않음을 나타내며, 프로세스의 자원 해제를 준비합니다.

이 단계에서 프로세스의 PID(프로세스 ID)는 여전히 시스템에 남아 있으며, 이는 부모 프로세스가 자식 프로세스의 종료 상태를 확인할 수 있도록 하기 위함입니다.



4. 자원 해제 종료된 프로세스는 사용하던 모든 자원을 해제해야 합니다.

여기에는 메모리, 파일 디스크립터, CPU 시간, I/O 장치 등이 포함됩니다.

커널은 이 자원들을 회수하여 다른 프로세스가 사용할 수 있도록 합니다.

이 과정에서 커널은 프로세스의 페이지 테이블을 삭제하고, 할당된 메모리를 반환하며, 열린 파일을 닫습니다.



5. 부모 프로세스에 종료 상태 전달 종료된 프로세스의 정보를 부모 프로세스에 전달하는 과정이 필요합니다.

부모 프로세스는 `wait()` 또는 `waitpid()` 시스템 호출을 통해 자식 프로세스의 종료 상태를 확인할 수 있습니다.

이 호출은 부모 프로세스가 자식 프로세스의 종료를 기다리도록 하며, 자식 프로세스의 종료 상태와 종료 코드를 반환합니다.

이 단계에서 부모 프로세스는 자식 프로세스의 PID를 사용하여 해당 프로세스의 종료 상태를 확인하고, 필요한 후속 작업을 수행할 수 있습니다.



6. 좀비 프로세스 처리 종료된 프로세스가 부모 프로세스에 의해 아직 수거되지 않은 경우, 해당 프로세스는 '좀비(zombie)' 상태로 남아 있습니다.

좀비 프로세스는 시스템 자원을 거의 사용하지 않지만, 여전히 PID를 차지하고 있습니다.

부모 프로세스가 종료 상태를 수거하면 좀비 프로세스는 완전히 제거됩니다.

만약 부모 프로세스가 종료되면, 커널은 좀비 프로세스를 '고아(orphans)'로 간주하고, init 프로세스(프로세스 ID 1)가 이들을 수거합니다.



7. 최종 정리 모든 자원이 해제되고, 부모 프로세스가 종료 상태를 수거하면, 프로세스는 시스템에서 완전히 제거됩니다.

이 과정은 커널의 프로세스 관리 기능의 핵심으로, 시스템의 안정성과 효율성을 유지하는 데 필수적입니다.

이와 같은 프로세스 종료 과정은 운영 체제의 설계와 구현에 따라 다소 차이가 있을 수 있지만, 기본적인 원리는 대체로 유사합니다.

프로세스 종료는 시스템 자원의 효율적인 관리와 안정성을 보장하는 데 중요한 역할을 합니다.

작성자: 정서우 [비회원] | 작성일자: 1년 전 2024-11-06 03:22:08
조회수: 145 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.