리눅스에서 좀비!

2014.02.02 17:40

audacious 조회 4898

 

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()를 호출하도록 수정하여 좀비 프로세스를 제거하여야 한다. 

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



번호 제목 글쓴이 조회 날짜
445 더도말고 덜도말고 한가위만 같아라......^^ 10 file 언제나당당 2236 2014.09.02
444 즐겁고 행복한 추석 명절이 되세요..꾸벅~ 5 풍운 1886 2014.09.03
443 그리운 고향......^^ 1 file 언제나당당 1902 2014.09.03
442 비가오네여..광석이형님과 클래식이 생각나는 날이네여. taemis 1769 2014.09.03
441 알림센터 문제 해결 완료 143 컴퓨터매니아 4656 2014.09.03
440 시범적 서비스를 시행 중 입니다. 11 컴퓨터매니아 1991 2014.09.03
439 인사드립니다.~ 꾸벅~ 추석명절 ~^^ 3 나그네 1876 2014.09.04
438 추석연휴 3 사라 1816 2014.09.04
437 소주에 심취한 일주일... 12 옥돌 2007 2014.09.04
436 풍요로운 한가뒤 되세요..^^ 1 file jins 1933 2014.09.05
435 성공의 길...그리고 추석연휴 잘 보내시길 바랍니다... 6 file 초원의빛 2878 2014.09.05
434 벌써부터 토렌토에 도네요.... 12 file 울보 3484 2014.09.05
433 리눅스 동아리 하려고 하는데요. 부천 송내1동 가까이 사시는 분~ 2 아리솔 2640 2014.09.05
432 한가위 즐겁게 보내시기 바랍니다. 1 한스 1911 2014.09.06
431 아름다운 인연......^^ 2 file 언제나당당 1840 2014.09.07
430 이건 아닌 것 같습니다. 18 file 너무졸려 2999 2014.09.10
429 행복할 수 있다면...... 1 언제나당당 1885 2014.09.11
428 시드 유지부탁드립니다. 22 리눅스매니아 3160 2014.09.11
427 우분투 광고기능 막는 방법 정리 1 컴퓨터매니아 2000 2014.09.12
426 한 주 마무리 잘 하십시요......^^ 3 언제나당당 1838 2014.09.12

 빠른 글쓰기




   Copyright 2013-2023 LinuxForum