리눅스에서 좀비!
2014.02.02 17:40
==============================================================
리눅스에서 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 | Pear Linux가 중단되었군요. 5 | 컴퓨터매니아 | 2366 | 2014.02.03 |
444 | GoogleTechTalks | audacious | 1680 | 2014.02.02 |
443 | 빨강별2.0 | audacious | 1699 | 2014.02.02 |
» | 리눅스에서 좀비! | audacious | 4900 | 2014.02.02 |
441 | 지워지지 않으니 바이러스! 3 | audacious | 1701 | 2014.02.02 |
440 | 하늘을 나는 새는 내릴곳을 찾고요. | audacious | 1642 | 2014.02.02 |
439 | Zorin OS8 & Elive 리눅스 2 | audacious | 2285 | 2014.02.01 |
438 | 부럽습니다. 2 | audacious | 1971 | 2014.02.01 |
437 | 한국 인터넷 역사의 산파. 2 | audacious | 2141 | 2014.01.31 |
436 | 쓸쓸하지만 행복합니다. 6 | 언제나당당 | 1755 | 2014.01.31 |
435 | 새해에는 무조건 행복하세요......^^ 1 | 언제나당당 | 1998 | 2014.01.31 |
434 | 따뜻한 명절 보내세요......^^ 2 | 언제나당당 | 1723 | 2014.01.30 |
433 | 책을 한 권 구입 했습니다. 4 | 언제나당당 | 1770 | 2014.01.30 |
432 | 패배가 문제가 아니다. 2 | audacious | 1675 | 2014.01.30 |
431 | Greetings 1 | k-style | 1507 | 2014.01.30 |
430 | 自己紹介書 1 | audacious | 1609 | 2014.01.29 |
429 | 리눅백업용량. | audacious | 1610 | 2014.01.29 |
428 | 풍성한 설 명절 되십시요!!! ^^ 5 | 삐리리 | 1868 | 2014.01.29 |
427 | 새해의 기도...... 2 | 언제나당당 | 1784 | 2014.01.28 |
426 | 행복한 설 명절 보내세요......^^ 4 | 언제나당당 | 1591 | 2014.01.28 |