좀비 프로세스 란 무엇이며 어떻게 종료합니까?


답변:


17

세상에! 아니, 아니. kill -9를 사용하지 마십시오.

프로세스가 깨끗하게 할 수있는 기회를주지 않습니다.

  1. 소켓 연결 종료

  2. 임시 파일 정리

  3. 아이들에게 사라지고 있다고 알리다

  4. 터미널 특성 등을 재설정하십시오.

일반적으로 15를 보내고 1 초 또는 2 초 정도 기다립니다. 그래도 문제가 해결되지 않으면 2를 보내십시오. 그래도 문제가 해결되지 않으면 1을 보내십시오. 그래도 문제가 해결되지 않으면 프로그램이 제대로 작동하지 않으므로 BINARY를 제거하십시오!

kill -9를 사용하지 마십시오. 화분을 정리하기 위해 콤바인 수확기를 꺼내지 마십시오.


13
kill -9는 좀비를 죽이지 않습니다. 부모님을 죽여야합니다. pstree를보십시오.
LapTop006

3
@ LapTop006 :이 경우 뱀파이어와 비슷합니다. 침략을 멈추기 위해 머리 뱀파이어를 죽여라.
amphetamachine 2019

2
이 대답은 거의 모든면에서 잘못되었습니다. 프로세스가 완료되었습니다. 이미 연결을 종료하고 임시 파일 등을 정리했습니다. 더 이상 실제 프로세스가 없으며 프로세스 테이블의 항목입니다. 하위 바이너리를 제거하지 마십시오. 제대로 작동하지 않습니다. 그것은 단지 부모가 아직 아이를 위해 적절한 장례식을 치르지 않았다는 것을 의미합니다.
Ken Williams

19

좀비 프로세스 (실제로 <defunct>)는 실제로 프로세스가 아닙니다. 프로세스 테이블의 항목이므로 상위 프로세스는 wait()syscall 을 수행 할 수 있습니다 .

걱정하지 않아도됩니다. 그들은 어떤 자원도 차지하지 않으며 wait(), 부모 자신이 죽을 때 부모가 전화 할 때 사라집니다 .



9

그러나 이미 허용 된 답변이 있습니다. 좀비 프로세스를 종료 할 수 있습니다. 디버거와 함께 부모 프로세스에 연결하고 waitpid 함수를 호출하십시오. 예 :-부모에 PID = 100, 좀비 프로세스에 PID = 200이 있다고 가정 해 봅시다.

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit

흥미 롭군 나는 이것을 시도 할 것이다.
ewwhite

8

좀비 프로세스에는 프로세스 트리의 항목 이외의 다른 리소스가 할당되어 있지 않습니다. 이것은 프로세스가 완료 될 때 발생하지만 부모 프로세스는 아직 프로세스를 거두지 못했습니다 (예 : wait에드).

원하는 경우 부모에게 SIGCHLD ( kill -20) 를 보내 부모에게 강제로이를 시도 할 수 있지만 부모가이를 존중한다는 보장은 없습니다.

당신은 종종 짧은 시간 동안 그것들을 보게 될 것입니다 (예를 들어 top을 사용하여 프로세스 트리를 보는 동안)-이것은 정상입니다; 하위 프로세스가 완료된 시간과 상위 프로세스가이를 폴링하는 시간 간격에서 하위 프로세스는 좀비로 표시됩니다.

그러나 지속적으로 존재하는 좀비 프로세스 (정상적인 것은 아님)를 보면 죽은 프로세스에 할당 된 리소스가 없기 때문에 다시 걱정할 필요가 없습니다. 이는 일반적으로 애플리케이션이 크 래피 개발자에 의해 잘못 작성되었음을 의미합니다.

좀비 프로세스에 관심을 가져야 할 유일한 시간은 예를 들어 위에서 언급 한 동일한 크 래피 애플리케이션이로드되는 경우와 같이 많은 프로세스를 볼 때뿐입니다.

우리는 내가 일하는 곳에서 엉뚱한 개발자가 많으므로 그러한 문제를 처리하고 그렇게하는 동안 모든 종류의 쓸모없는 것을 배우는 특권이 있습니다. 사실, 우리 팀은 종종 인터뷰에서 크 래피 개발자가 작성한 크 래피 쉘 스크립트를 사용합니다. 후보자가 스크립트가 실제로 고르지 않다고 고르고 왜 크 래피인지 알려면 문을 잘 들어야합니다.


0

가상 샷건은 ...

$ 촬영 <pid>
#! / bin / sh
희생자 =`ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b"| awk '{print $ 2}'`
희생자 \ _name =`ps -e -o pid, cmd | egrep "^ \ s * $ {victim} \ b"| 헤드 -n 1 | awk '{print $ 2}'`
#kill $ {victim}
echo "Killed $ {victim_name}."

그리고 기억하십시오 : 항상 머리에 쏴.


죄송 합니다만 기록에 따르면이 스크립트는 "victim_name"오타가 있으며 $ 1에 지정된 PID의 부모를 죽일 것입니다. 아버지를 죽이고 모든 가족이 멸망합니다.
Marc Riera

-1

좀비 프로세스는 실행이 완료되었지만 프로세스 테이블에 계속 나열되는 프로세스입니다.

kill -9 [parent process_name] 이 (가) 극도의 편견을 가지고이를 중단시킵니다.


kill -9는 좀비 프로세스를 죽이지 않습니다. 이것이 그들이 좀비라고 불리는 이유입니다. 좀비 "프로세스"는 상위 프로세스에서 리턴 코드를 얻을 때까지 사라지지 않습니다.
Mei

3
아니요, 부모에서 -9를 죽이면 부모 를 죽이고 부모를 초기화 하여 자식의 리턴 코드 를 얻습니다 .
Alan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.