IT/운영체제

⚙️ [운영체제] 프로세스 종료 및 자원 반환

BlogFlow 2025. 6. 24. 18:00
반응형

[운영체제 목차 바로가기]

3️⃣ 프로세스 관리 - 프로세스의 생성과 종료

📌 프로세스 종료 및 자원 반환 (Process Termination & Resource Deallocation)


운영체제에서 프로세스는 단순히 “종료”된다고 끝나는 것이 아니다.

실행이 끝난 이후에도 운영체제는 프로세스가 점유하고 있던 자원들을 안전하게 회수하고 정리해야 하며,

이 과정을 통해 다른 프로세스들이 시스템 자원을 원활하게 사용할 수 있도록 보장한다.


1️⃣ 프로세스 종료의 정의

  • 프로세스 종료(Process Termination)란,

프로세스가 자신의 실행을 끝내고 운영체제에 종료 의사를 알리는 상태 전이를 의미한다.

종료는 정상적 종료(normal termination)비정상적 종료(abnormal termination)로 나뉜다.


2️⃣ 종료 방식의 종류

종료 방식 설명
정상 종료 프로그램이 의도대로 작업을 마치고 종료 (return, exit() 등)
비정상 종료 예외, 오류, 시그널(SIGKILL, SIGSEGV 등)로 인해 강제 종료
강제 종료 외부 요청(kill, taskkill, 관리자 권한) 또는 시스템 강제 종료

3️⃣ 프로세스 종료 시 커널이 수행하는 작업

✅ 1. 종료 코드(exit status) 저장

  • 자식 프로세스는 exit(status)로 종료 코드를 반환
  • 부모는 wait() 또는 waitpid() 호출 시 해당 값을 수신
  • 상태 코드(0: 성공, 1~255: 오류 코드)는 부모의 제어 흐름에 사용됨

✅ 2. 열린 파일, 디바이스 핸들 해제

  • open()으로 열었던 파일, 소켓, 파이프 등의 파일 디스크립터(fd) 모두 닫힘 (close())
  • 디스크에 flush되지 않은 데이터는 강제 기록(flush)되거나 손실 방지 처리
  • 연결된 네트워크 소켓은 FIN 패킷 또는 강제 종료(RST)로 처리됨

✅ 3. 메모리 자원 회수

  • 프로세스가 사용하던 전체 주소 공간(코드, 데이터, 힙, 스택)은 커널에 의해 반환
  • malloc()으로 할당한 힙 메모리도 강제 회수됨 (사용자가 free() 하지 않아도)
  • mmap()이나 공유 메모리도 매핑 해제되며, 참조 카운트가 0이면 삭제

✅ 4. IPC 자원 정리

  • 프로세스가 소유하던 다음과 같은 자원은 제거됨 또는 참조 감소
    • 세마포어
    • 메시지 큐
    • 공유 메모리
    • 파이프, 익명 소켓

단, 공유 자원은 다른 프로세스가 접근 중인 경우 즉시 제거되지 않음


✅ 5. 커널 자료구조 해제

  • 프로세스 관련 정보가 담긴 PCB(Process Control Block)는 종료 이후 커널이 회수
  • 사용하던 커널 스택, 커널 내부 대기 큐 정보 등도 모두 제거

✅ 6. 부모 프로세스에게 종료 알림

  • 부모는 wait()을 통해 자식 종료 여부를 확인하고 exit code를 수거
  • 부모가 수거하지 않으면 좀비 프로세스(Zombie) 상태로 남게 됨

4️⃣ 좀비 프로세스와 Orphan 프로세스

🧟‍♂️ 좀비(Zombie) 프로세스

  • 프로세스는 종료됐지만, 부모가 아직 종료 상태를 수거하지 않아 PCB만 남아 있는 상태
  • 실제로 실행은 되지 않지만, PID와 PCB는 커널에 남아 있음
  • 수거되지 않으면 시스템에 PID 고갈, 프로세스 테이블 낭비 문제 발생

해결 방법: 부모 프로세스가 wait() 또는 waitpid() 호출하여 종료 상태 수거


👻 고아(Orphan) 프로세스

  • 부모 프로세스가 먼저 종료되고, 자식 프로세스가 여전히 실행 중인 상태
  • Linux에서는 init 또는 systemd가 고아 프로세스를 수거하여 상태 관리
  • 자식 프로세스는 독립적으로 계속 실행됨

5️⃣ 프로세스 종료 흐름 (Linux 예시)

1. 프로세스가 `exit(status)` 호출
2. 열린 파일/소켓 닫기
3. 메모리 공간 반환
4. 커널은 exit code를 부모에게 전달
5. 상태를 “Zombie”로 전환
6. 부모가 `wait()`로 수거
7. 커널이 PCB 제거 → 완전한 종료


6️⃣ Windows에서의 자원 반환

자원 유형 반환 방법 또는 상태
파일 핸들 자동 해제 또는 CloseHandle()
메모리 VirtualFree() 또는 프로세스 종료 시 자동 해제
GDI 객체 자동 해제 또는 DeleteObject() 필요
프로세스 핸들 커널이 관리하며 WaitForSingleObject() 등으로 수거
쓰레드 ExitThread() 또는 ExitProcess()로 함께 종료

7️⃣ 종료된 자원의 상태 추적 도구 (Linux)

도구 설명
ps 종료되지 않은 프로세스 상태 확인
top, htop 실행 중인/좀비 상태 확인
lsof 열린 파일 확인 (종료 전 상태 추적)
/proc/[pid]/ 특정 프로세스의 상세 정보 디렉터리
wait, kill 종료 대기 또는 강제 종료 수행

📌 요약

  • 프로세스 종료 시 운영체제는 모든 자원을 정확하게 회수하여 시스템 안정성을 유지함
  • 열린 파일, 메모리, IPC 자원, 커널 내부 자료구조 등 종류별로 다르게 처리되며
  • 부모 프로세스가 자식 종료 상태를 수거하지 않으면 좀비 프로세스 발생
  • 자원 누수 없이 안전하게 종료되는 프로세스를 만들기 위해서는,
  • 종료 시점의 철저한 자원 정리와 부모-자식 프로세스 관계 관리가 필수

🧹 프로세스 종료는 단순한 '끝남'이 아니라,

시스템 자원 회수, 상태 수거, 커널 구조 정리 등 복합적인 운영체제 기능이 총동원되는 과정이다.

반응형