티스토리 뷰

Linux/TIP

좀비프로세스 죽이기

이주성 2013. 1. 11. 16:44

아래 명령으로 확인한 defunct된 프로세스 중 쉽게 죽지않는 것들이 있습니다.

ps -aux | grep defunct

죽지 않는 좀비 프로세스는 아닙니다. 그 좀비 프로세스의 부모 프로세스를 죽이면 됩니다.

다음 명령으로 그 부모 프로세스를 찾을수 있습니다.

pstree -pu -H | [해당 PID] |  more

화면을 넘기다 보면 더밝은 글자로 하이라이트 된 프로세스가 해당 좀비 프로세스 입니다.

프로세스 트리에서 그 프로세스의 부모를 찾아 죽이면 해당 defunct된 프로세스가 죽습니다.


좀비 프로세스란?

어떤 특정 프로세스가 자신의 일을 종료하지만, 그 종료된 결과 또는 상태를 자신을 만들어준 parent process에게 보고 한 후 종료하려 하지만 그 parent 프로세스는 child 프로세스를 기다려 주지 않는 경우 이프로세스는 defunct라는 모양으로 보여지게 됩니다.


즉 자신에게 주어진 모든일을 완수는 하였지만, 무슨 이유에서건 (parent가 child보다 먼저 프로세스를 종료하고 없어진 결우, child로 부터의 return값을 받기 위해 기다려 주지 않는 경우등) 자신의 child process를 monitoring해 주지 않으면 , 이 프로세스는 쉽게 말해 고아인 프로세스가 되어, 이 프로세스가 수행되기 위해 할당 되었는 모든 환경들은 release하였지만 프로세스 테이블로 부터는 제거되지 않은 상태로 남게된 프로세스를 말한다.


이처럼 프로세스가 만들어지는 것은 다음과 같이 크게 두가지 경우로 나누어 볼수 있다.

(1) 진짜 좀비 프로세스가 되어 버린 경우

어느 프로세스가 자신에게 주어진 모든 일을 완수 하고 wait 시스템 콜을 사용하여 자신으로 부터의 결과를 기다리는 parent 프로세스가 있으면 ps -l에서 보여지는 결과에는 "Z"상태에 있음을 보여 줍니다.

이런 경우에는 kill -18(또는 kill -CLD)를 하여 프로세스를 없애 버릴수 있으며, 만약 parent의 PID가 1번 이 아니라면 parent 자체를 kill함으로써 init프로세스에게 zombie프로세스를 clean up하도록 시킬수 있습니다.

그러나 parent process의 PID가 1(init process)라면 kill이 불가능 함으로 시스템을 리부팅하는 방법밖에 없다.


(2) 프로세스가 자신의 일을 종료는 하였지만 정상적으로 exit 또는 terminate 되지 못한 상태에 있는 경우 (즉 할당된 모든 커널 자원들을 해제하지 못한경우)

이 원인은 일반적으로 어떤 특정 디바이스와의 통신중에 발생하며, 이는 드라이버 프로그램의 버그이거나 통신상의 테이터들이 XOFF만을 만나게 되게 flushing되지 못한 경우에 발생됩니다.


이런 상태에 있는것들은 ps -l에서 보면 "S"상태에 있게 됩니다.

이럴때에는 (XON)을 보내거나, 현제 묶여져 있는 모든 프로세스를 kill시키고, 새로운 getty프로세스를 생성시킴으로써 hung up현상을 제거 시킬수도 있지만 원하는 결과가 나오지 않는다면 시스템을 재시동 시키는 방법만있습니다. 

'Linux > TIP' 카테고리의 다른 글

linux에서 소스 받아서 설치하기 (linux 폴더 구조)  (0) 2020.12.25
FTP 서버 설치 (ubuntu 기준)  (0) 2020.12.04
계정 관리  (0) 2020.04.19
유저그룹 (USER GROUP)  (0) 2018.09.18
syntaxhighlighter  (0) 2013.01.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함