홈페이지 » 어떻게 » Linux에서 좀비 프로세스란 무엇입니까?

    Linux에서 좀비 프로세스란 무엇입니까?

    Linux 사용자라면 좀비 프로세스가 프로세스 목록을 뒤적 거리는 것을 보았을 것입니다. 이미 좀비 프로세스를 죽일 수는 없습니다. 실제 좀비처럼.

    좀비는 기본적으로 제대로 정리되지 않은 죽은 프로세스의 남은 조각입니다. 좀비 프로세스를 만드는 프로그램이 제대로 프로그래밍되지 않습니다. 프로그램이 좀비 프로세스를 고수하도록하지는 않습니다..

    이미지 크레디트 : Daniel Hollister on Flickr (Remixed)

    좀비 프로세스 란 무엇입니까??

    좀비 프로세스가 무엇인지, 좀비 프로세스가 나타나는 원인을 이해하려면 Linux에서 프로세스가 작동하는 방식에 대해 약간 이해해야합니다.

    프로세스가 리눅스에서 죽으면 메모리에서 즉시 제거되지는 않습니다 - 프로세스 디스크립터는 메모리에 남아 있습니다 (프로세스 디스크립터는 아주 작은 양의 메모리 만 사용합니다). 프로세스의 상태는 EXIT_ZOMBIE가되고 프로세스의 상위 프로세스는 하위 프로세스가 SIGCHLD 신호로 사망했다는 통지를받습니다. 그런 다음 상위 프로세스는 wait () 시스템 호출을 실행하여 작동하지 않는 프로세스의 종료 상태 및 기타 정보를 읽어야합니다. 이렇게하면 상위 프로세스가 작동하지 않는 프로세스에서 정보를 얻을 수 있습니다. wait ()가 호출 된 후 좀비 프로세스가 메모리에서 완전히 제거됩니다..

    이는 일반적으로 매우 빠르게 발생하므로 시스템에 좀비 프로세스가 누적되지 않습니다. 그러나 부모 프로세스가 제대로 프로그래밍되지 않고 wait ()를 호출하지 않으면 좀비 자식은 정리 될 때까지 메모리에 계속 머무를 것입니다.

    그놈 시스템 모니터와 같은 유틸리티 상단 명령 및 추신 명령 디스플레이 좀비 프로세스.

    좀비 프로세스의 위험

    좀비 프로세스는 시스템 리소스를 모두 사용하지 않습니다. 실제로, 각 프로세스 메모리는 프로세스 디스크립터를 저장하기 위해 매우 적은 양의 시스템 메모리를 사용합니다. 그러나 각 좀비 프로세스는 프로세스 ID (PID)를 유지합니다. Linux 시스템은 32 비트 시스템에서 기본적으로 32767 개의 프로세스 ID가 있습니다. 예를 들어 부적절하게 프로그래밍 된 서버 소프트웨어가로드로 인해 좀비 프로세스를 생성하는 경우와 같이 좀비가 매우 빠른 속도로 누적되면 결국 사용 가능한 PID 풀이 결국 좀비 프로세스에 할당되어 다른 프로세스가 시작되지 못하게됩니다.

    그러나 몇 가지 좀비 프로세스가 문제가되지는 않습니다 - 시스템에서 부모 프로세스와 관련된 버그를 나타내지 만.

    좀비 프로세스 제거하기

    좀비 프로세스를 죽일 수는 없으므로 SIGKILL 신호로 정상 프로세스를 죽일 수 있습니다. 좀비 프로세스는 이미 죽었습니다. 시스템에 많은 양을 가지고 있지 않으면 좀비 프로세스를 제거 할 필요가 없습니다. 몇 가지 좀비가 무해합니다. 그러나 좀비 프로세스를 제거 할 수있는 몇 가지 방법이 있습니다..

    한 가지 방법은 SIGCHLD 신호를 부모 프로세스에 보내는 것입니다. 이 신호는 부모 프로세스에게 wait () 시스템 호출을 실행하고 좀비 자식을 정리하도록 지시합니다. 신호를 죽이다 명령, 대체 피피 아래 명령에서 상위 프로세스의 PID :

    kill -s SIGCHLD pid

    그러나 상위 프로세스가 제대로 프로그래밍되지 않고 SIGCHLD 신호를 무시하는 경우에는 도움이되지 않습니다. 좀비의 부모 프로세스를 죽이거나 종료해야합니다. 좀비를 만든 프로세스가 끝나면 init은 좀비 프로세스를 상속하고 새로운 부모가됩니다. init은 주기적으로 Linux에서 부팅되고 PID 1이 할당 된 첫 번째 프로세스입니다. init은 좀비 자식을 정리하기 위해 wait () 시스템 호출을 주기적으로 실행하므로 init은 좀비에 대한 짧은 작업을 수행합니다. 부모 프로세스를 닫은 후에 다시 시작할 수 있습니다..

    부모 프로세스가 계속해서 좀비를 생성하는 경우 좀비 자식을 얻기 위해 wait ()를 제대로 호출하도록 고정해야합니다. 시스템상의 프로그램이 좀비 생성을 계속한다면 버그 보고서를 제출하십시오.