시스템에서 좀비 프로세스를 죽여야합니까?


20

Linux / Unix 시스템에 익숙하지 않고 좀비 프로세스 에 대해 읽었으므로 한 가지 질문이 있습니다. 지금 10 개가 있습니다. 나는 그들을 죽여야합니까? 그렇다면 왜 그렇습니까? 시스템에 부하가 있습니까?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped

25
그들을 죽일 필요가 없습니다. 그들은 이미 죽었습니다.
Marco

2
그래서 그들은 더 이상 내 시스템을로드하지 않습니다. 그리고 그들은 시스템을 재부팅하거나 죽일 때까지 이렇게 유지됩니다.
Jason Paddle

7
@Marco : 당신은 이미 죽은 것을 죽일 수 없습니다. 그러나 부모님을 죽일 수 있습니다.
wullxz

7
문제는 그들의 부모가 그들을 죽이지 않았다는 것입니다 (죽었을 때).
ypercubeᵀᴹ

3
10 좀비 ?? 당신은 감염되었습니다! Jason을 실행하십시오.
Luc M

답변:


29

좀비를 죽일 수는 없습니다. 이미 죽었습니다.

해당 프로세스의 리소스는 무료이며 다른 프로세스에서 사용할 수 있습니다. 남아있는 것은 프로세스 테이블의 항목입니다. 이것은 성능에 영향을 미치지 않습니다. 걱정하지 마십시오.


그렇습니다. 부모 프로세스를 죽일 수 있습니다. 정보 주셔서 감사합니다. 나는 그들이 시스템을로드하거나하지 않는지 알고 싶었습니다.
Jason Paddle

그래도 좀비에는 한계가 있다고 생각합니다. 나는 그것이 1024라고 생각하기 때문에 성능을 손상 시키지는 않지만 당신이 가질 수있는 수에는 한계가 있다고 생각합니다.
ProfessionalAmateur

@ProfessionalAmateur 좀비 한계 (1024 이상)에 도달하면 어떻게됩니까?
냉동 완두콩의 로디

@RoddyoftheFrozenPeas-솔직히 말하지만, 나는 그 시점에 도달하기 전에 항상 그것들을 정리했습니다. 시스템이 다른 좀비를 만들려고 시도하고 메모리 위반이나 다른 하드 오류, 오버플로 또는 조각화 오류가 있다고 생각합니다.
ProfessionalAmateur

2
@ProfessionalAmateur : 리눅스 에는 좀비 제한 이 없습니다 . 좀비 PID는 /proc/sys/kernel/pid_max다른 모든 PID와 마찬가지로에 적용됩니다 .
rsaw

16

추신에 나타나는 이러한 좀비 프로세스는 무엇입니까? 나는 그들을 죽이지 만 그들은 가지 않는다!

좀비는 죽은 과정입니다. 당신은 죽은자를 죽일 수 없습니다. 모든 프로세스는 결국 죽고, 그렇게되면 좀비가됩니다. 그들은 거의 자원을 소비하지 않으며, 그들은 죽었 기 때문에 예상됩니다! 좀비의 이유는 좀비의 부모 (프로세스)가 좀비의 종료 상태 및 리소스 사용량 통계를 검색 할 수 있기 때문입니다. 부모는 wait () 시스템 호출 중 하나를 사용하여 더 이상 좀비가 필요하지 않다고 운영 체제에 알립니다.

프로세스가 종료되면 자식 프로세스는 모두 프로세스 번호 1의 자식 프로세스가되며 이는 초기 프로세스입니다. Init은 아이들이 좀비로 남아 있지 않도록 항상 죽기를 기다리고 있습니다.

좀비 프로세스가있는 경우 해당 좀비가 부모에 의해 대기하지 않았 음을 의미합니다 (ps -l로 표시되는 PPID 참조). 세 가지 선택 사항이 있습니다. 상위 프로세스를 수정하십시오 (기다리십시오). 부모를 죽이고; 또는 그것과 함께 산다. 좀비가 ps 출력에서 ​​하나 이상의 추가 라인을 차지하기 때문에 함께 사는 것이 그렇게 어렵지 않다는 것을 기억하십시오.

출처 : http://www.linuxsa.org.au/tips/zombies.html

그리고 당신이 죽이는 행위에 있다면,이 수퍼 유저 스레드는 당신에게 흥미로울 것입니다 : 좀비 프로세스의 부모 프로세스를 어떻게 찾습니까?


부모를 고치는 것은 과잉 일 수 있습니다. 어쩌면 아직 자녀를 기다리는 시점이 아닐 수도 있습니다. 어쩌면 나중에 할 수도 있습니다 (그렇습니다, 그렇지 않을 수도 있습니다).
Romain

네 말이 맞아. 내가 링크 한 질문에 대한 답변은 부모 프로세스를 결정하는 방법을 알려줍니다. 따라서 어떤 프로세스가 좀비를 생성하는지 확인하고 계속 실행해야하는지 여부를 결정할 수 있습니다.
wullxz

7

당신은 그들을 죽일 필요가 없습니다.

기본적인 이해를 구축하려면 :

모든 프로세스는 부모 프로세스의 자식입니다 (init 프로세스를 제외하고는 걱정할 필요가 없습니다).

자식 프로세스가 실행을 마치더라도 부모 프로세스가 액세스하고자하는 데이터, 일반적으로 자식 프로세스의 결과를 설명하는 종료 코드를 포함 할 수 있습니다 (성공 했습니까? 오류입니까? 오류 코드는 무엇입니까?).

완성 된 자식 프로세스는 부모 프로세스가 "리프"하거나 자식 프로세스를 기다릴 때까지 프로세스 테이블에서 좀비 프로세스로 중단됩니다. 이는 단순히 자식 프로세스가 더 이상 자식 프로세스가 필요하지 않다고 OS에 알리는 부모 프로세스입니다. 원하는 반환 값을 읽었으며 완료되었습니다. 이 시점에서 시스템은 프로세스 테이블의 항목을 정리합니다.


3

이 프로세스는 종료 할 필요가 없습니다.

어쨌든 (어떤 이유로 든) 죽이기를 원하는 경우를 대비하여 머리를 쏘십시오. 유용한 명령은 다음과 같습니다.

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

에서 https://www.erianna.com/kill-a-linux-zombie-process


1
일에 대한 shoot at the head.
BenjiWiebe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.