본문 바로가기
서버/Linux

[리눅스] 좀비 프로세스 찾기, 죽이기

by WYYOON 2023. 2. 8.
728x90
반응형
SMALL

1. Zombie Process란?

프로세스가 종료되고 리소스는 모두 회수되었지만, 시스템 프로세스 테이블에 남아있는 defunct 상태의 프로세스 '좀비 프로세스'라고 하는데요. 실행이 종료되었지만 아직 삭제되지 않은 프로세스입니다.

 

2. 발생 원인

보통 프로세스는 exit() 시스템 함수를 호출함으로써 운영체제에게 자신의 삭제를 요청하며 종료되는데요. Process가 종료되면 사용하던 리소스는 운영체제에게 다시 회수됩니다.

그러나 이때 프로세스의 종료 상태가 저장되는 시스템 프로세스 테이블에는 해당 프로세스가 남아있는 상태인데요. 해당 프로세스는 부모 프로세스가 wait() 시스템 함수를 호출할 때까지 남아있게 됩니다.

 

다시 말하면, 프로세스 자체는 종료되었지만 부모 프로세스가 아직 wait() 시스템 함수를 호출하지 않아 시스템 프로세스 테이블에 남아있는 Process를 바로 '좀비 프로세스'라고 하는 것입니다.

 

***

모든 프로세스는 종료하게 되면 좀비 프로세스가 되지만 아주 짧은 시간 동안 머무르게 되고, 부모 프로세스가 wait() 시스템 함수를 호출하면 시스템 프로세스 테이블에 남아있던 좀비 프로세스의 데이터와 프로세스 식별자(PID)가 운영체제에 반환되는 것입니다.

 

즉, 좀비 프로세스로 계속해서 남아있다는 것은 부모가 wait() 시스템 함수를 호출하지 않아, 이미 종료된 프로세스가 시스템 프로세스 테이블에 계속해서 남아있는 것입니다. 

 

3. Zombie Process 확인

- top 명령어로 확인시 아래 2번째줄에 보면 zombie 프로세스가 있는 경우가 있다.

# top
top - 09:17:42 up 1561 days, 2 min,  1 user,  load average: 1.35, 2.23, 2.31
Tasks: 476 total,   1 running, 475 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.8%us,  0.4%sy,  0.0%ni, 98.7%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16318236k total, 15221236k used,  1097000k free,  1560128k buffers
Swap:  8388604k total,   165472k used,  8223132k free, 10787956k cached

* zombie process 확인 명령어

# ps -ef | grep defunct | grep -v grep
root     17107 21899  0 Feb25 ?        00:00:00 [myagent] <defunct>
test 21207 21205  0 Feb26 ?        00:00:00 [check_service.sh] <defunct>

4. 좀비 프로세스 수 확인

# top -b -n 1 | grep zombie

또는 

# ps -ef | grep defunct | grep -v grep | wc -l

5. 좀비 프로세스 죽이기

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

 

728x90
반응형
SMALL