리눅스에서 좀비!

2014.02.02 17:40

audacious 조회 4897

 

toy-funko-pvz-zombie-front.jpg

 

 

스냅샷01.png

 ==============================================================

리눅스에서 TOP 를 치면 ZOMBIE 라고 나오는 부분이 존재한다.

대부분 원격접속 프로그램으로 접속한 경우가 있는데 

그렇지 않은 좀비 프로세스를 확인 정리하는 방법이다.

 

리눅스 좀비 프로세스 확인

# ps aux | awk '{print $8" " $2}' |grep -w Z

 

해당 명령어를 사용하면 프로세스ID를 확인할수 있으며 이것으로 프로세스정보를 확인한 후에

다음의 명령어로 삭제하면 된다.

 

잘못해서 서비스를 죽이는일이 없도록 하자.

 

리눅스 좀비 프로세스 KILL

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


===============================================================


http://getpocket.com/a/read/197060677



{*좀비 프로세스란 무엇인가?*}


좀비 프로세스가 무엇이고 무엇 때문에 나타나는지 이해하기 위해서 

리눅스에서 프로세스가 동작하는 방식에 대해 알 필요가 있다. 


프로세스가 리눅스에서 종료될 때 그 즉시 메모리에서 제거되지 않는다. 

Process Descriptor가 메모리에 남는다(Process Descriptor는 매우 적은양의 메모리만 차지한다).

프로세스 상태는 EXIT_ZOMBIE가 되며 부모 프로세스에게 자식 프로세스가 SIGCHLD 신호로 종료되었음을 알린다. 

그러면 부모 프로세스는 자식 프로세스의 종료 상태와 기타 정보를 읽기 위해 wait() 시스템 콜을 실행하여야 한다. 

부모 프로세스는 죽은 프로세스로부터 정보를 얻는 것이 허용되어 있다. 

wait()이 호출된 후 좀비 프로세스는 메모리에서 완전히 제거된다. 


이러한 과정은 매우 빠르게 일어나기 때문에 시스템에 좀비 프로세스에 누적되는 것을 볼 수 없을 것이다. 

하지만 부모 프로세스가 제대로 프로그래밍되지 않았다면 wait()을 호출하지 않을 것이며 

좀비 프로세스는 메모리에 존재할 것이다. 


GNOME System Monitor, top 명령어, ps 명령어와 같은 유틸리티는 좀비 프로세스를 표시할 것이다. 


{*좀비 프로세스의 위험성*}


좀비 프로세스는 시스템 자원을 소모하지 않는다. 

사실, 각 좀비는 process descriptor를 저장하기 위해 아주 적은 양의 시스템 메모리를 사용한다.

그렇지만 

모든 좀비 프로세스는 프로세스 ID(PID)를 남긴다. 

리눅스 시스템은 한정된 프로세스 ID를 가진다. 

32비트 시스템에서는 32767의 제한이 있다. 

만일 좀비 프로세스가 빠른 비율로 축적된다면, 

예를 들면 부적합하게 프로그래밍된 서버 소프트웨어가 좀비 프로세스를 생성하면 

결국 전체 가용 PID를 좀비 프로세스에 할당하여 다른 프로세스의 실행을 방해할 것이다. 


하지만 소수의 좀비 프로세스가 남아 있는 것은 버그이지만 시스템에 큰 문제가 되지 않는다. 


{*좀비 프로세스 제거하기*} 


좀비 프로세스는 이미 종료된 것이기 때문에 

SIGKILL 신호를 사용하여 일반 프로세스를 종료하듯이 좀비 프로세스를 종료할 수 없을 것이다. 

시스템에 매우 많은 좀비가 존재하지 않는다면 좀비 프로세스를 제거할 필요는 없다. 

소수의 좀비는 별 해가 없다. 

하지만 좀비 프로세스를 제거하는 몇 가지 방법이 있다. 


한가지 방법은 부모 프로세스에 SIGCHLD 신호를 보내는 것이다. 

이 신호는 부모 프로세스에게 wait() 시스템 콜을 실행하도록 하여 좀비가 된 자식 프로세스를 없애도록 한다. 

kill 명령어로 시그널을 보낼 때 pid 대신에 부모 프로세스의 PID를 사용한다. 


kill -s SIGCHLD pid


하지만 부모 프로세스가 올바르게 프로그래밍되지 않았다면 SIGCHLD 시그널을 무시할 것이며 이 방법은 별 도움이 되지 않을 것이다. 좀비 프로세스의 부모 프로세스를 종료하여야 할 것이다. 

좀비 프로세스를 생성한 프로세스가 종료될 때 init는 좀비 프로세서를 상속받을 것이며 새로운 부모가 될 것이다. 

(init은 리눅스에서 가장 첫번째 프로세스이며 PID 1을 할당 받는다) init는 주기적으로 wait() 시스템 콜을 실행하여 

좀비가 된 자식 프로세스를 정리할 것이다. 

이 후 부모 프로세스를 다시 시작할 수 있다. 


만일 부모 프로세스가 좀비 프로세스를 계속 생성한다면 wait()를 호출하도록 수정하여 좀비 프로세스를 제거하여야 한다. 

프로그램이 시스템에서 좀비 프로세스를 계속 생성한다면 버그 레포트를 제출하도록 한다.



번호 제목 글쓴이 조회 날짜
1005 알림센터 문제 해결 완료 143 컴퓨터매니아 4656 2014.09.03
1004 비가오네여..광석이형님과 클래식이 생각나는 날이네여. taemis 1769 2014.09.03
1003 그리운 고향......^^ 1 file 언제나당당 1902 2014.09.03
1002 즐겁고 행복한 추석 명절이 되세요..꾸벅~ 5 풍운 1886 2014.09.03
1001 더도말고 덜도말고 한가위만 같아라......^^ 10 file 언제나당당 2236 2014.09.02
1000 여유롭고 풍성한 한가위 되십시요~~~!!! ^^ 12 file 삐리리 3429 2014.09.02
999 오랜만에 안부나..... 5 lamants 1841 2014.09.01
998 9월 힘차게 열어가십시요......^^ 12 언제나당당 1889 2014.09.01
997 이제부터 컴파일한 패키지를 드리기로 했습니다. 8 컴퓨터매니아 1914 2014.08.31
996 누구나 살면서 어느 날 문득...... 언제나당당 1822 2014.08.31
995 메인보드 하나 사고 일이 커지게 생겼네요. ^^ 3 file 클릭 2115 2014.08.30
994 패치 적용했습니다. 28 컴퓨터매니아 2035 2014.08.30
993 서버 이전을 완료했습니다. 37 컴퓨터매니아 2208 2014.08.30
992 역시 "나눔공간"은 많은 분들이 보지를 않는군요..^^ 6 언제나당당 2053 2014.08.29
991 우리는......^^ 1 언제나당당 1796 2014.08.29
990 나눔의 기쁨을 함께 누려요......^^ 3 언제나당당 1993 2014.08.28
989 다운로드 테스트 부탁드립니다. 34 컴퓨터매니아 2271 2014.08.28
988 크롬 요번업데이트 하지마세요~(수정) 7 file 잠곰탱이 2279 2014.08.27
987 서버 이전을 진행하고 있습니다. 5 컴퓨터매니아 1767 2014.08.27
986 언제나당당님 한테 컴퓨터본체 받았습니다. 12 file 모노스 2444 2014.08.26

 빠른 글쓰기




   Copyright 2013-2023 LinuxForum