IT/Linux

[리눅스 커널 이야기]프로세스 상태보기 - D, R, S, T, Z, fork(), wait(), exit()

호도과자 2022. 8. 10. 01:16

프로세스 상태 보기

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