
프로세스는 CPU를 쓰다가(Running), 쉬다가(Sleeping), 멈추고(Stopped), 결국 죽어서(Zombie) 사라진다.
리눅스 커널은 프로세스 상태를 task_struct 내의 state 필드로 관리합니다.
ps나 top 명령의 STAT 컬럼에서 볼 수 있는 문자입니다.
| 상태 코드 | 커널 상수명 | 설명 | 비고 |
|---|---|---|---|
| R | TASK_RUNNING | 실행 중 또는 실행 대기(Ready) | CPU를 점유 중이거나, 런큐(RunQueue)에서 줄 서 있는 상태. |
| S | TASK_INTERRUPTIBLE | 대기 (Sleep) | 이벤트(키보드, 소켓 등) 대기. 시그널이 오면 깨어남. |
| D | TASK_UNINTERRUPTIBLE | 특수 대기 (Deep Sleep) | 디스크 I/O 등 하드웨어 대기. 강제 종료(kill -9) 불가. |
| T | TASK_STOPPED | 정지 | Ctrl+Z나 디버거에 의해 멈춤. SIGCONT로 재개 가능. |
| Z | EXIT_ZOMBIE | 좀비 | 종료(exit)했으나 부모가 확인(wait) 안 함. 껍데기만 남음. |
| X | EXIT_DEAD | 사망 | 부모가 확인 완료. 완전히 메모리에서 삭제됨. (거의 안 보임). |
fork): 프로세스 탄생 → R (Ready) 상태로 런큐 진입.R (Running) CPU 점유.sleep/read): I/O 요청 등으로 대기 필요 → S 또는 D로 이동 (CPU 반납).R (Ready)로 이동.R (Ready)로 밀려남.exit): 할 일 다 함 → Z (Zombie) 상태가 되어 부모 기다림.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 - 죽여도 안 죽는 상태)
