top
gui 기반의 명령과 같은 명령을 사용 System Monitor
하면 현재 몇 가지 좀비 프로세스가 있음을 알 수 있습니다.
좀비 프로세스 란 무엇입니까?
시스템 성능이나 좀비 응용 프로그램에 영향을 미칩니 까? 메모리 나 메모리를 너무 많이 사용합니까?
top
gui 기반의 명령과 같은 명령을 사용 System Monitor
하면 현재 몇 가지 좀비 프로세스가 있음을 알 수 있습니다.
좀비 프로세스 란 무엇입니까?
시스템 성능이나 좀비 응용 프로그램에 영향을 미칩니 까? 메모리 나 메모리를 너무 많이 사용합니까?
답변:
좀비는 DEAD 프로세스입니다. 그들은 '죽일'수 없습니다 (DEAD를 죽일 수 없습니다). 모든 프로세스는 결국 죽고, 그렇게되면 좀비가됩니다. 그들은 거의 자원을 소비하지 않으며, 그들은 죽었 기 때문에 예상됩니다! 좀비의 이유는 좀비의 부모 (프로세스)가 좀비의 종료 상태 및 리소스 사용량 통계를 검색 할 수 있기 때문입니다. 부모는 wait () 시스템 호출 중 하나를 사용하여 더 이상 좀비가 필요하지 않다고 운영 체제에 알립니다.
프로세스가 종료되면 해당 자식 프로세스는 모두 프로세스 번호 1의 자식 프로세스가되며 이는 초기 프로세스입니다. Init은 아이들이 죽기를 기다리는``항상 ''이므로 좀비로 남아 있지 않습니다.
좀비 프로세스가있는 경우 부모가 해당 좀비를 기다리지 않았 음을 의미합니다 (로 표시된 PPID 확인 ps -l
). 세 가지 선택 사항이 있습니다. 상위 프로세스를 수정하십시오 (기다리십시오). 부모를 죽이고; 또는 그것과 함께 산다. 좀비가 ps 출력에서 하나 이상의 추가 라인을 차지하기 때문에 함께 사는 것이 그렇게 어렵지 않다는 것을 기억하십시오.
STAT 열에 "Z"가 있으면 Unix ps 명령의 출력에서 좀비를 식별 할 수 있습니다. 짧은 시간 이상 존재하는 좀비는 일반적으로 상위 프로그램의 버그를 나타냅니다. 다른 누출과 마찬가지로, 좀비가 몇 개 존재한다는 것은 그다지 걱정되지 않지만 무거운 부하에서 심각한 문제가 발생할 수 있습니다.
시스템에서 좀비를 제거하기 위해 kill 명령을 사용하여 SIGCHLD 신호를 부모에게 수동으로 보낼 수 있습니다. 부모 프로세스가 여전히 좀비를 거두지 않으면 다음 단계는 부모 프로세스를 제거하는 것입니다. 프로세스가 부모를 잃으면 init는 새로운 부모가됩니다. Init은 주기적으로 대기 시스템 호출을 실행하여 init를 부모로하여 모든 좀비를 거둔다.
부모 프로세스가 종료되거나 종료 된 컴퓨터 프로세스 인 고아 프로세스 도 있습니다 .
서버를 요청한 후 클라이언트 프로세스가 충돌하면 원격 호출 중에 프로세스가 고아가 될 수 있습니다.
고아는 서버 리소스를 낭비하고 잠재적으로 서버에 문제를 일으킬 수 있습니다 (이것은 좀비와 고아 간의 가장 큰 리소스 차이입니다 (고아 좀비 영화가있는 경우 제외)) 고아 프로세스 문제에 대한 몇 가지 해결책이 있습니다.
근절은 가장 일반적으로 사용되는 기술입니다. 이 경우 고아 프로세스가 종료됩니다.
환생은 기계가 주기적으로 원격 계산의 부모를 찾으려고하는 기술입니다. 이 시점에서 고아 프로세스가 종료됩니다.
만료는 각 프로세스가 종료되기 전에 특정 시간 동안 완료되는 기술입니다. 프로세스가 필요한 경우 할당 된 시간이 만료되기 전에 더 많은 시간이 "완료"될 수 있습니다.
프로세스는 상위 프로세스와 동일한 시스템에서 실행 중일 수 있습니다. 유닉스 계열 운영 체제에서 고아 프로세스는 특수한 "init"시스템 프로세스에 의해 즉시 채택됩니다. 이 작업을 재 부모라고하며 자동으로 수행됩니다. 기술적으로 프로세스에 "init"프로세스가 상위 프로세스 인 경우에도 원래 프로세스가 더 이상 존재하지 않기 때문에 여전히 고아 프로세스라고합니다.
더 많은 정보:
http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU
http://www.linuxsa.org.au/tips/zombies.html
http://www.brighthub.com/computing/linux/articles/79186.aspx
init
wait
모든 자식 프로세스에 대한 호출 은 좀비, 고아 (고아), 생물학적 (자체)입니까?
좀비 프로세스 (로 <defunct>
표시됨)는 실제 프로세스가 아닙니다. 커널 프로세스 테이블의 항목 일뿐입니다. 이것이 그들이 소비하는 유일한 자원입니다. CPU 나 RAM을 사용하지 않습니다. 좀비가 발생할 수있는 유일한 위험은 프로세스 테이블에 공간이 부족한 것입니다 ( cat /proc/sys/kernel/threads-max
시스템에서 허용되는 항목 수 를 확인하는 데 사용할 수 있음).
부모 프로세스 (즉, 프로세스 fork()'ed
)가 활성화되어 있지만 아직 wait()
시스템 기능을 호출하지 않은 경우에만 나타납니다 . 부모가 사망하면, 좀비는 wait()'ed
에 의해 init
사라진다.
top
에서`스크린 샷 이 질문은 당신이 모순되는 것처럼 보인다? 좀비는 1 CPU의 100 %를 사용하지만 메모리는 사용하지 않는 것으로 보입니다.
좀비 프로세스는 실행을 중지 한 프로세스이지만 상위 프로세스가 대기 syscall을 통해 프로세스를 검색하지 않았기 때문에 프로세스 테이블 항목이 여전히 존재합니다. 기술적으로 종료되는 각 프로세스는 매우 짧은 기간 동안 좀비이지만 더 오래 살 수 있습니다.
하위 프로세스가 완료된 후 상위 프로세스가 대기 syscall을 호출하지 않으면 수명이 긴 좀비 프로세스가 발생합니다. 이러한 상황이 발생하는 한 가지 상황은 상위 프로세스가 잘못 작성되어 단순히 대기 호출을 생략하거나 상위 프로세스가 하위 프로세스보다 먼저 종료되고 새 상위 프로세스가 대기를 호출하지 않는 경우입니다. 프로세스의 부모가 자식보다 먼저 죽으면 OS는 자식 프로세스를 "init"프로세스 또는 PID 1에 할당합니다. 즉, init 프로세스는 자식 프로세스를 "적용"하여 부모가됩니다. 이것은 이제 자식 프로세스가 종료되면 새 부모 (init)가 종료 코드를 얻기 위해 wait를 호출해야하거나 프로세스 테이블 항목이 영원히 유지되고 좀비가된다는 것을 의미합니다