Linux 사용자 인 경우 프로세스 목록에서 좀비 프로세스가 혼란스럽게 보일 수 있습니다. 좀비 프로세스는 실제 좀비처럼 이미 죽었 기 때문에 죽일 수 없습니다.
좀비는 기본적으로 제대로 정리되지 않은 죽은 프로세스의 남은 부분입니다. 좀비 프로세스를 생성하는 프로그램은 올바르게 프로그래밍되지 않습니다. 프로그램은 좀비 프로세스를 고수하지 않아야합니다.
좀비 프로세스 란 무엇입니까?
좀비 프로세스가 무엇인지, 좀비 프로세스가 나타나는 원인을 이해하려면 Linux에서 프로세스가 작동하는 방식에 대해 약간 이해해야합니다.
프로세스가 Linux에서 죽으면 프로세스 메모리가 모두 메모리에서 즉시 제거되는 것은 아닙니다. 프로세스 디스크립터는 메모리에 남아 있습니다 (프로세스 디스크립터는 적은 양의 메모리 만 사용합니다). 프로세스 상태가 EXIT_ZOMBIE가되고 프로세스의 부모에게 자식 프로세스가 SIGCHLD 신호로 종료되었다는 알림이 표시됩니다. 그런 다음 상위 프로세스는 대기 프로세스의 종료 상태 및 기타 정보를 읽기 위해 wait () 시스템 호출을 실행해야합니다. 이것은 부모 프로세스가 죽은 프로세스로부터 정보를 얻을 수있게합니다. wait ()가 호출 된 후 좀비 프로세스가 메모리에서 완전히 제거됩니다.
이것은 일반적으로 매우 빨리 발생하므로 시스템에서 좀비 프로세스가 누적되는 것을 볼 수 없습니다. 그러나 부모 프로세스가 제대로 프로그래밍되지 않고 wait ()를 호출하지 않으면 좀비 하위 요소가 정리 될 때까지 메모리에 고정됩니다.
그놈 시스템 모니터와 같은 유틸리티 상단 명령 및 추신 명령 표시 좀비 프로세스.

좀비 프로세스의 위험
좀비 프로세스는 시스템 리소스를 사용하지 않습니다. 실제로 각 프로세스는 프로세스 디스크립터를 저장하기 위해 매우 적은 양의 시스템 메모리를 사용합니다. 그러나 각 좀비 프로세스는 프로세스 ID (PID)를 유지합니다. Linux 시스템은 32 비트 시스템에서 유한 한 수의 프로세스 ID – 기본적으로 32767을 갖습니다. 좀비가 매우 빠른 속도로 누적되는 경우 (예 : 잘못 프로그래밍 된 서버 소프트웨어가로드 상태에서 좀비 프로세스를 생성하는 경우) 사용 가능한 PID 풀 전체가 좀비 프로세스에 할당되어 다른 프로세스가 시작되지 못하게합니다.
그러나 몇 가지 좀비 프로세스가 문제가되지는 않지만 시스템에서 상위 프로세스에 버그가 있음을 나타냅니다.

좀비 프로세스 제거
SIGKILL 신호로 일반 프로세스를 종료 할 수 있으므로 좀비 프로세스를 종료 할 수 없습니다. 좀비 프로세스는 이미 종료되었습니다. 시스템에 많은 양이 없다면 좀비 프로세스를 제거 할 필요가 없습니다. 몇 가지 좀비는 무해합니다. 그러나 좀비 프로세스를 제거 할 수있는 몇 가지 방법이 있습니다.
한 가지 방법은 SIGCHLD 신호를 상위 프로세스로 전송하는 것입니다. 이 신호는 부모 프로세스에게 wait () 시스템 호출을 실행하고 좀비 자식을 정리하도록 지시합니다. 와 신호를 보내 죽임 교체 명령 pid 부모 프로세스의 PID와 함께 아래 명령에서
kill -s SIGCHLD pid
그러나 상위 프로세스가 올바르게 프로그래밍되지 않고 SIGCHLD 신호를 무시하는 경우 도움이되지 않습니다. 좀비의 부모 프로세스를 종료하거나 종료해야합니다. 좀비를 만든 프로세스가 종료되면 init는 좀비 프로세스를 상속하여 새 부모가됩니다. (init는 리눅스 부팅시 시작된 첫 번째 프로세스이며 PID 1이 할당됩니다.) init는 주기적으로 wait () 시스템 호출을 실행하여 좀비 자식을 정리하므로 좀비의 짧은 작업을 수행합니다. 상위 프로세스를 닫은 후 다시 시작할 수 있습니다.
상위 프로세스가 계속 좀비를 작성하는 경우 wait ()를 올바르게 호출하여 좀비 하위를 가져 오도록 수정해야합니다. 시스템의 프로그램이 좀비 생성을 계속하면 버그 보고서를 제출하십시오.








