본문 바로가기

리눅스

좀비 프로세스(zombie processes)를 찾고 종료하는 방법

728x90

좀비 프로세스(zombie processes)를 찾고 종료하는 방법

좀비 프로세스(Zombie Process)는 컴퓨터 운영 체제에서 발생하는 프로세스 상태 중 하나입니다. 이 상태는 프로세스가 이미 종료되었지만 해당 프로세스의 종료 상태(Exit Status)를 부모 프로세스에게 전달 중인 상태를 나타냅니다. 이러한 종료 상태 전달은 부모 프로세스가 자식 프로세스의 종료 상태를 확인하고 해당 정보를 수집하기 위해 필요합니다.

 

좀비 프로세스가 발생하는 과정은 다음과 같습니다.

 

  1. 부모 프로세스가 자식 프로세스를 생성합니다.
  2. 자식 프로세스가 작업을 수행하고 종료되면 그 종료 상태(Exit Status)는 시스템에 남아 있습니다.
  3. 부모 프로세스는 wait() 또는 waitpid() 함수를 사용하여 자식 프로세스의 종료 상태를 확인하려고 시도합니다.
  4. 부모 프로세스가 자식 프로세스의 종료 상태를 확인하기 전에 종료되거나 종료 상태를 확인하지 않으면 자식 프로세스는 좀비 프로세스 상태로 남게 됩니다.

좀비 프로세스는 기본적으로 자원을 소비하지 않으며 시스템에 큰 영향을 미치지 않습니다. 그러나 과도한 좀비 프로세스가 쌓이면 시스템의 프로세스 테이블이 가득 찰 수 있고 이로 인해 시스템 성능에 영향을 미칠 수 있습니다.

 

좀비 프로세스는 부모 프로세스가 wait() 또는 waitpid() 함수를 사용하여 자식 프로세스의 종료 상태를 확인하면 제거됩니다. 따라서 부모 프로세스가 자식 프로세스의 종료 상태를 확인하지 않는다면 좀비 프로세스가 시스템에 남게 됩니다. 때문에 부모 프로세스는 자식 프로세스의 종료 상태 확인을 제대로 처리하는 것이 중요합니다.

728x90
좀비 프로세스는 이미 종료된 프로세스인데 여전히 시스템 프로세스 테이블에 남아 있는 프로세스입니다.

1. 좀비 프로세스 찾기

좀비 프로세스를 찾습니다.

ps -ef | grep -v grep | grep defunct
$ ps -ef | grep -v grep | grep defunct
root     10885 10864  0 11:48 ?        00:00:02 [yumBackend.py] <defunct>

(또는)

ps aux | grep 'Z'

2. 좀비 프로세스 종료(PPID ID로 종료)

좀비 프로세스를 종료합니다. 이때 좀비 프로세스의 PID (프로세스 ID)를 사용해야 합니다.

ps -ef | grep -v grep | grep defunct | awk '{print $3}' | xargs kill -9
$ ps -ef | grep -v grep | grep defunct | awk '{print $3}' | xargs kill -9
죽었음 (core dumped)

3. 좀비 프로세스 확인

좀비 프로세스가 사라졌는지 확인합니다.

ps aux | grep 'Z'

4. 자동으로 처리

서버에서 정기적으로 좀비 프로세스가 발생하는 경우, 이러한 프로세스를 자동으로 처리하는 스크립트를 작성하고 스케줄러를 사용하여 실행할 수 있습니다.

defunct 상태의 프로세스들을 종료(zombie one shot one kill)

ps -ef | grep -v grep | grep defunct | awk '{print $3}' | xargs kill -9

 

좀비 프로세스는 종료되어야 하며, 오랜 시간 동안 누적되면 시스템 자원을 소비할 수 있으므로 주기적으로 확인하고 종료하는 것이 좋습니다.

 

728x90