[Linux] 프로세스 상태 천이

mommers·2026년 2월 4일

Linux

목록 보기
39/59


프로세스 상태 천이

프로세스는 CPU를 쓰다가(Running), 쉬다가(Sleeping), 멈추고(Stopped), 결국 죽어서(Zombie) 사라진다.

리눅스 커널은 프로세스 상태를 task_struct 내의 state 필드로 관리합니다.


1. 주요 상태 (Process States)

pstop 명령의 STAT 컬럼에서 볼 수 있는 문자입니다.

상태 코드커널 상수명설명비고
RTASK_RUNNING실행 중 또는 실행 대기(Ready)CPU를 점유 중이거나, 런큐(RunQueue)에서 줄 서 있는 상태.
STASK_INTERRUPTIBLE대기 (Sleep)이벤트(키보드, 소켓 등) 대기. 시그널이 오면 깨어남.
DTASK_UNINTERRUPTIBLE특수 대기 (Deep Sleep)디스크 I/O 등 하드웨어 대기. 강제 종료(kill -9) 불가.
TTASK_STOPPED정지Ctrl+Z나 디버거에 의해 멈춤. SIGCONT로 재개 가능.
ZEXIT_ZOMBIE좀비종료(exit)했으나 부모가 확인(wait) 안 함. 껍데기만 남음.
XEXIT_DEAD사망부모가 확인 완료. 완전히 메모리에서 삭제됨. (거의 안 보임).

2. 상태 천이 과정 (Lifecycle Flow)

  1. 생성 (fork): 프로세스 탄생 → R (Ready) 상태로 런큐 진입.
  2. 디스패치 (Schedule): 스케줄러가 선택 → R (Running) CPU 점유.
  3. 시스템 콜 (sleep/read): I/O 요청 등으로 대기 필요 → S 또는 D로 이동 (CPU 반납).
  4. 깨어남 (Wake Up): I/O 완료 인터럽트 발생 → 다시 R (Ready)로 이동.
  5. 선점 (Preemption): 타임 슬라이스(할당 시간) 종료 → 강제로 R (Ready)로 밀려남.
  6. 종료 (exit): 할 일 다 함 → Z (Zombie) 상태가 되어 부모 기다림.

3. 상태 확인 예제

Bash

# STAT 열 확인
$ ps -eo pid,stat,comm
  PID STAT COMMAND
 1234 R+   my_program   (Running, Foreground)
 5678 Ss   bash         (Sleeping, Session Leader)
 9999 Z    defunct      (Zombie - 죽여도 안 죽는 상태)

profile
임베디드 개발자가 되기 위해 공부중입니다!

0개의 댓글