[리눅스 커널 이야기]프로세스 상태보기 - D, R, S, T, Z, fork(), wait(), exit()
프로세스 상태 보기
top 명령어를 통해 S 컬럼 값을 통해 확인할 수 있음
$ man top
* 모든 프로세스는 fork() 시스템콜을 통해 만들어짐
1. D = uninterruptible sleep
디스크 혹은 네트워크 I/O를 대기하고 있는 프로세스. D 상태의 프로세스들은 대기하는 동안 Run Queue에서 나와 Wait Queue로 들어감
프로세스가 디스크 작업을 하게 되면 어느 블록에 있는 어느 데이터를 읽어달라고 요청 -> 프로세스는 보낸 요청이 도착할 떄 까지 대기해야 함 -> cpu에 대한 사용권을 다른 프로세스에 넘김 -> uninterruptible 상태로 마킹 -> wait 상태로 변경
해당 상태는 특정 요청이 끝나기를 기다리므로, 시스템의 부하를 계산하는데 영향을 미침
2. R = running
실행중인 프로세스. 실제로 CPU 리소스를 사용중인 프로세스
3. S = sleeping
대기중인 점이라는 것은 D 상태와 같음. 다른 점은 요청한 리소스를 즉시 사용할 수 있음(interruptible)
sleep() 시스템 콜과 같이 호출해서 타이머를 작동 혹은 콘솔 입력을 기다리는 프로세스들은 interruptible sleep 상태.
특정 요청에 대한 응답을 기다리는 것이 아니고 언제든 시그널을 받아 처리할 수 있도록 interruptible 상태로 마킹하고 wait 상태로 변경
4. T = traced or stopped
strace 등의 명령어를 통해 프로세스의 시스템 콜을 추적하고 있는 상태를 보여줌. 보통 시스템에서는 자주 보기 어려움
5. Z = zombie
부모 프로세스가 죽은 자식 프로세스
좀비 프로세스는 시스템의 cpu, mem리소스를 차지하지 않기 때문에 큰 문제는 되지 않음. PID를 점유하고 있기 때문에 문제가 됨.
참조
강진우, DevOps와 SE를 위한 리눅스 커널 이야기, 인사이트, 2017, Chapter02