Linux / Unix 시스템에 익숙하지 않고 좀비 프로세스 에 대해 읽었으므로 한 가지 질문이 있습니다. 지금 10 개가 있습니다. 나는 그들을 죽여야합니까? 그렇다면 왜 그렇습니까? 시스템에 부하가 있습니까?
592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
Linux / Unix 시스템에 익숙하지 않고 좀비 프로세스 에 대해 읽었으므로 한 가지 질문이 있습니다. 지금 10 개가 있습니다. 나는 그들을 죽여야합니까? 그렇다면 왜 그렇습니까? 시스템에 부하가 있습니까?
592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
답변:
좀비를 죽일 수는 없습니다. 이미 죽었습니다.
해당 프로세스의 리소스는 무료이며 다른 프로세스에서 사용할 수 있습니다. 남아있는 것은 프로세스 테이블의 항목입니다. 이것은 성능에 영향을 미치지 않습니다. 걱정하지 마십시오.
/proc/sys/kernel/pid_max
다른 모든 PID와 마찬가지로에 적용됩니다 .
추신에 나타나는 이러한 좀비 프로세스는 무엇입니까? 나는 그들을 죽이지 만 그들은 가지 않는다!
좀비는 죽은 과정입니다. 당신은 죽은자를 죽일 수 없습니다. 모든 프로세스는 결국 죽고, 그렇게되면 좀비가됩니다. 그들은 거의 자원을 소비하지 않으며, 그들은 죽었 기 때문에 예상됩니다! 좀비의 이유는 좀비의 부모 (프로세스)가 좀비의 종료 상태 및 리소스 사용량 통계를 검색 할 수 있기 때문입니다. 부모는 wait () 시스템 호출 중 하나를 사용하여 더 이상 좀비가 필요하지 않다고 운영 체제에 알립니다.
프로세스가 종료되면 자식 프로세스는 모두 프로세스 번호 1의 자식 프로세스가되며 이는 초기 프로세스입니다. Init은 아이들이 좀비로 남아 있지 않도록 항상 죽기를 기다리고 있습니다.
좀비 프로세스가있는 경우 해당 좀비가 부모에 의해 대기하지 않았 음을 의미합니다 (ps -l로 표시되는 PPID 참조). 세 가지 선택 사항이 있습니다. 상위 프로세스를 수정하십시오 (기다리십시오). 부모를 죽이고; 또는 그것과 함께 산다. 좀비가 ps 출력에서 하나 이상의 추가 라인을 차지하기 때문에 함께 사는 것이 그렇게 어렵지 않다는 것을 기억하십시오.
출처 : http://www.linuxsa.org.au/tips/zombies.html
그리고 당신이 죽이는 행위에 있다면,이 수퍼 유저 스레드는 당신에게 흥미로울 것입니다 : 좀비 프로세스의 부모 프로세스를 어떻게 찾습니까?
당신은 그들을 죽일 필요가 없습니다.
기본적인 이해를 구축하려면 :
모든 프로세스는 부모 프로세스의 자식입니다 (init 프로세스를 제외하고는 걱정할 필요가 없습니다).
자식 프로세스가 실행을 마치더라도 부모 프로세스가 액세스하고자하는 데이터, 일반적으로 자식 프로세스의 결과를 설명하는 종료 코드를 포함 할 수 있습니다 (성공 했습니까? 오류입니까? 오류 코드는 무엇입니까?).
완성 된 자식 프로세스는 부모 프로세스가 "리프"하거나 자식 프로세스를 기다릴 때까지 프로세스 테이블에서 좀비 프로세스로 중단됩니다. 이는 단순히 자식 프로세스가 더 이상 자식 프로세스가 필요하지 않다고 OS에 알리는 부모 프로세스입니다. 원하는 반환 값을 읽었으며 완료되었습니다. 이 시점에서 시스템은 프로세스 테이블의 항목을 정리합니다.
이 프로세스는 종료 할 필요가 없습니다.
어쨌든 (어떤 이유로 든) 죽이기를 원하는 경우를 대비하여 머리를 쏘십시오. 유용한 명령은 다음과 같습니다.
kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`
shoot at the head
.