리눅스에서 좀비!

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

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



번호 제목 글쓴이 조회 날짜
1424 루분투 사용기 3 야밤 5343 2013.10.19
1423 제가 '말달리자'는 이유입니다. 2 k-style 5285 2013.11.22
1422 Ultimate PE v4.2버전과 EX버전 부팅비교 와 ... 6 file 나그네 5234 2014.02.28
1421 겸손의 그릇 31 언제나당당 5222 2014.05.24
1420 sp1 모두 받아지나요? 75 schin 5098 2014.09.12
1419 카리스마조님 4.2.1에서 몇가지 않되는 부분 file mac 5021 2014.03.04
1418 윈스쿨이 앞으로는 많이 클것 같습니다. 22 카리스마조 5004 2014.07.15
1417 예쁜 우분투 아이콘 설치 file audacious 4946 2014.08.01
» 리눅스에서 좀비! file audacious 4897 2014.02.02
1415 [마감] 리눅스 PE 비공개 베타 테스터 모집합니다. 35 컴퓨터매니아 4838 2014.07.11
1414 손, 손에 대하여......^^ 12 file 언제나당당 4743 2014.07.12
1413 잠시 추억속으로 시간여행을......^^ 5 file 언제나당당 4665 2014.07.12
1412 알림센터 문제 해결 완료 143 컴퓨터매니아 4656 2014.09.03
1411 wine이라는것이 좋은 물건일까요? 3 tofinder 4616 2013.10.24
1410 타잔 친구들... 17 김명숙 4598 2014.07.10
1409 성공하려면 귀는 열고 입은 닫아라 1 file 초원의빛 4512 2014.07.22
1408 리눅스에 Potplayer 설치보고서. 7 file audacious 4500 2014.05.25
1407 텔레그램, 어떤거 써야 되는지.. 4 덴뿌라에소주한잔 4379 2014.10.08
1406 Ultimate K로 PE를 만들면? 58 카리스마조 4286 2014.07.15
1405 타잔친구님 볼륨조절 해결방법 입니다. 8 file 카리스마조 4190 2014.03.02

 빠른 글쓰기




   Copyright 2013-2023 LinuxForum