가상 샷건?
답변
세상에! 아니, 아니. kill -9를 사용하지 마십시오.
프로세스가 깨끗하게 할 수있는 기회를주지 않습니다.
-
소켓 연결 종료
-
임시 파일 정리
-
아이들에게 사라지고 있다고 알리다
-
터미널 특성 등을 재설정하십시오.
일반적으로 15를 보내고 1 초 또는 2 초 정도 기다립니다. 그래도 문제가 해결되지 않으면 2를 보내십시오. 그래도 문제가 해결되지 않으면 1을 보내십시오. 그래도 문제가 해결되지 않으면 프로그램이 제대로 작동하지 않으므로 BINARY를 제거하십시오!
kill -9를 사용하지 마십시오. 화분을 정리하기 위해 콤바인 수확기를 꺼내지 마십시오.
답변
좀비 프로세스 (실제로 <defunct>
)는 실제로 프로세스가 아닙니다. 프로세스 테이블의 항목이므로 상위 프로세스는 wait()
syscall 을 수행 할 수 있습니다 .
걱정하지 않아도됩니다. 그들은 어떤 자원도 차지하지 않으며 wait()
, 부모 자신이 죽을 때 부모가 전화 할 때 사라집니다 .
답변
완전히 할당 해제되었지만 여전히 프로세스 테이블에 존재하는 프로세스입니다. 이것을 부모가 죽었지 만 여전히 실행중인 고아 프로세스와 대조하십시오 .
답변
그러나 이미 허용 된 답변이 있습니다. 좀비 프로세스를 종료 할 수 있습니다. 디버거와 함께 부모 프로세스에 연결하고 waitpid 함수를 호출하십시오. 예 :-부모에 PID = 100, 좀비 프로세스에 PID = 200이 있다고 가정 해 봅시다.
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
답변
좀비 프로세스에는 프로세스 트리의 항목 이외의 다른 리소스가 할당되어 있지 않습니다. 이것은 프로세스가 완료 될 때 발생하지만 부모 프로세스는 아직 그 프로세스를 거두지 못했습니다 (예 : wait
에드).
원하는 경우 부모에게 SIGCHLD ( kill -20
) 를 보내 부모에게 강제로이를 시도 할 수 있지만 부모가이를 존중한다는 보장은 없습니다.
당신은 종종 짧은 시간 동안 그것들을 보게 될 것입니다 (예를 들어 top을 사용하여 프로세스 트리를 보는 동안)-이것은 정상입니다; 하위 프로세스가 완료된 시간과 상위 프로세스가이를 폴링하는 시간 간격에서 하위 프로세스는 좀비로 표시됩니다.
그러나 지속적으로 존재하는 좀비 프로세스 (정상적인 것은 아님)를 보면 죽은 프로세스에 할당 된 리소스가 없기 때문에 다시 걱정할 필요가 없습니다. 이는 일반적으로 애플리케이션이 크 래피 개발자에 의해 잘못 작성되었음을 의미합니다.
좀비 프로세스에 관심을 가져야 할 유일한 시간은 예를 들어 위에서 언급 한 동일한 크 래피 애플리케이션이로드되는 경우와 같이 많은 프로세스를 볼 때뿐입니다.
우리는 내가 일하는 곳에서 엉뚱한 개발자가 많으므로 그러한 문제를 처리하고 그렇게하는 동안 모든 종류의 쓸모없는 것을 배우는 특권이 있습니다. 사실, 우리 팀은 종종 인터뷰에서 크 래피 개발자가 작성한 크 래피 쉘 스크립트를 사용합니다. 후보자가 스크립트가 실제로 고르지 않다고 고르고 왜 크 래피인지 알려면 문을 잘 들어야합니다.
답변
가상 샷건은 …
$ 촬영 <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}."
그리고 기억하십시오 : 항상 머리에 쏴.
답변
좀비 프로세스는 실행이 완료되었지만 프로세스 테이블에 계속 나열되는 프로세스입니다.
kill -9 [parent process_name] 이 (가) 극도의 편견을 가지고이를 중단시킵니다.