리눅스 시스템에서 ps, top, htop 명령어를 실행했을 때 STAT 또는 S항목에 표시되는 프로세스 상태값(Process State Codes)를 정리합니다.

프로세스가 현재 CPU에서 실행 중이거나, CPU를 할당받기 위해 실행 큐에서 기다리고 있는 상태
R이라고 해서 반드시 그 순간 CPU를 사용하고 있는 것은 아님프로세스가 이벤트, 입력, 네트워크 응답, I/O 완료 등을 기다리는 대기 상태
중단 불가능한 대기 상태
S 와 비슷하지만, 주로 디스크나 특정 하드웨어 I/O 작업이 완료되기를 기다리는 상태
D 상태가 오랫동안 많이 발생한다면 시스템 성능 문제를 의심프로세스가 일시적으로 멈춘 상태
Ctrl + Z : 멈춤
fg : 해제
프로세스 실행 자체는 끝났지만, 부모 프로세스가 자식의 종료 상태를 아직 wait 등으로 회수하지 않은 상태
ps aux : 리눅스 및 유닉스 시스템에서 현재 실행 중인 모든 프로세스의 상세한 상태를 스냅샷 형태로 출력하는 명령어

다른 프로세스보다 CPU 자원을 더 먼저, 많이 할당받는 상태(nice 값이 낮음)
다른 프로세스에 양보하도록 설정된 상태(nice 값이 높음)
실시간 시스템이나 빠른 처리를 위해 메모리 페이지가 디스크(swap)으로 빠져나가지 않도록 고정된 상태
해당 프로세스가 하나의 세션(Session)을 생성하고 관리하는 세션 리더
하나의 프로세스 안에서 여러 개의 스레드가 동시에 동작하고 있는 상태
현재 터미널 창에서 사용자와 직접 상호작용하며 실행 중인 프로세스 그룹에 속해 있음
Ss : 인터럽트가 가능한 대기(S)상태이면서, 세션 리더(s)인 프로세스Ss+ : 인터럽트가 가능한 수면(S)상태이면서, 세션 리더(s)인 프로세스이면서, 터미널 앞에서 동작하고 있는 포어그라운드(+) 프로세스I< : 현재 쉬고 있지만(I), 실행될 때 높은 우선순위(<)를 가지는 커널 스레드I - Idle : 현재 유휴 상태인 커널 스레드D 상태 프로세스 확인ps aux
또는
ps -eo pid,stat,comm
으로 D 상태 프로세스 확인
D 상태가 많거나 오래 유지된다면 디스크/스토리지/NFS 등의 I/O 병목 현상을 의심해보기!
kill -9 <Zombie PID>
좀비 프로세는 실행이 이미 끝났기 때문에 좀비 프로세스 자체를 kill 하는 것으로 해결되지 않음
ps -eo pid,ppid,stat,cmd
로 부모 프로세스 PPID 확인

좀비 프로세스의 문제는 부모가 자식의 종료 상태를 wait()로 회수하지 않았다는 것이므로 부모 프로세스가 정상적으로 자식 프로세스를 회수하도록 해야 함
즉, PPID 확인 -> 부모 프로세스 상태 확인 -> 부모가 자식 종료 상태 회수하도록 조치 -> 필요 시 부모 프로세스를 정상 종료하거나 재시작
1. watch -n 0.5 'ps aux'
반복 관찰하기

2-1. systemctl status <서비스명>
2-2. journalctl -u <서비스명>
watch를 이용하면 프로세스를 반복적으로 관찰할 수 있지만, 매우 짧게 실행되고 종료되는 프로세스는 놓칠 수 있다.
systemd 서비스라면 systemctl status <서비스명> 으로 서비스 상태와 최근 실행 정보를 확인하고, journalctl -u <서비스명>으로 상세 로그를 확인하여 종료 원인을 찾는다.
프로그램을 직접 실행할 수 있다면 실행 직후 echo $?를 통해 종료 코드(exit code)를 확인하는 것도 도움이 된다.
ps aux 를 실행하는 순간 이미 프로세스가 종료됐을 수 있기 때문의 위의 명령어를 통해 로그를 확인하여 조치를 취해야 한다.
리눅스의 프로세스 상태값을 통해 프로세스가 현재 실행 중인지, 대기 중인지, 정지 또는 종료된 상태인지 확인할 수 있다.
| 상태 | 의미 | 핵심 |
|---|---|---|
| R (Running) | 실행 중 / 실행 준비 | CPU를 사용 중이거나 CPU 할당을 기다리는 상태 |
| S (Sleeping) | 이벤트 대기 | 이벤트, 입력, I/O 완료 등을 기다리는 정상적인 대기 상태 |
| D (Uninterruptible Sleep) | 중단 불가능한 대기 | 주로 디스크·스토리지 등 I/O 작업이 끝나기를 기다리는 상태 |
| T (Stopped) | 일시 정지 | 시그널이나 디버거 등에 의해 실행이 멈춘 상태 |
| Z (Zombie) | 좀비 상태 | 실행은 종료됐지만 부모가 종료 정보를 아직 회수하지 않은 상태 |
D 상태 프로세스를 확인하고 I/O 병목 여부를 점검한다.Z)가 발생한다 → 좀비 자체가 아닌 부모 프로세스(PPID)를 확인한다.watch로 관찰하고, systemctl, journalctl, exit code 등을 통해 종료 원인과 로그를 확인한다.결국 프로세스 상태값은 단순히 현재 상태를 나타내는 것뿐만 아니라, CPU·I/O 병목, 비정상 종료, 좀비 프로세스 등의 문제 원인을 파악하는 중요한 단서로 활용할 수 있다.